Ȩ : http://cbuilder.shinhae.com/

 
1 / ! 콺  ķ̼ Ϸ...? 
	 , Ưġ ̵ϰ.. ư   ϴ ۵ 
	ķ̼Ϸ...    ? 
	, 콺 ޽  SendMessage PostMessage   
	ְڽϴٸ,   ڵϰ ôٸ.. 
	API mouse_event()Լ       ִϴ.. 
	 ϳ ô... 
	 ư ƹԳ ΰ ~~ ߷... 
	ڵ  ... 
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{
	   ShowMessage("Button 1 clicked"); 
	} 
	void __fastcall TForm1::Button2Click(TObject *Sender) 
	{ 
	    Application->ProcessMessages(); 
	    // Get the point in the center of button 1 
	    TPoint Pt; 
	    Pt.x = Button1->Left + Button1->Width / 2; 
	    Pt.y = Button1->Top + Button1->Height / 2; 
	    // Convert Pt to screen coordinates 
	    Pt = ClientToScreen(Pt); 
	    // Convert Pt to mickeys 
	    Pt.x = Pt.x * 65535. / Screen->Width; 
	    Pt.y = Pt.y * 65535. / Screen->Height; 
	    // Move the mouse 
	    mouse_event(MOUSEEVENTF_ABSOLUTE : MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0); 
	    // Simulate the left mouse button down 
	    mouse_event(MOUSEEVENTF_ABSOLUTE : MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0); 
	    // Simulate the left mouse button up 
	    mouse_event(MOUSEEVENTF_ABSOLUTE : MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0); 
	} 
	
	״  ѹ غ.. 
	     faq  ̴ϴ.. 
	 帮..    faq ti    
	ϴϴ..  ˷Ⱑ  ƴϽ е ѹ Ⱦø 
	  ɰ̴ϴ.. 


2 / ! ġƮ Ѱ ...?
	 TRichEdit ü TMemoʹ ޸ 64k ̻    ִٰ 
	Ұ .. ٵ  غ  ȵ˴ϴ. 
	(ġƮ)->Lines->LoadFromFile() ޼ҵ带 Ἥ ȭ ҷö û ū 
	ȭϵ ҷµ, ҷ ȭ ƴ,  ȭϿ ߰  32k  
	ڸ ϱ,  ̻ ѹڸ  ѹڸ Է°.. 
	 .. 
	
	ǽɳ   ڸ ļ ׽Ʈ غǼ ǰű, 
	 ؽƮ īؼ Ŭ忡 ص״ٰ   
	α׷ ġƮ ̽Ʈ(̱) غ.  
	Ѱ迡 ε,  Է° ڴ 뷫 7õ ణ ѽϴ. 
	 ¿ ڸ ĺ.. ȲϰԵ ƹ ڵ  ʽϴ. 
	 ڸ  ѱ Է°ϰ.. ϰ Ѱ谡 ִٴ° ִ°. 
	׷.. ü ҷö ūȭϵ ҷ鼭,  ׳ ÿ ׷ ȵɱ..? 
	 ġƮ Ȯ  Ѱ  4.5ް  ˴ϴ. 
	׷  Է½ÿ ׷ ȵǴ°ɱ...? 
	
	... ~ (ƴô .... --;;;;) 
	ġƮ ޽ EM_EXLIMITTEXT ֽϴ. 
	 ġƮ ϸ, Ʈ Ѱ谡 32k ϴ. 
	(7000  ڹۿ ȵ  Ƹ ش Ʈ  
	 ˴ϴ.) 
	
	̰ Ϸ  EM_EXLIMITTEXT ޽ ġƮ Ʈѷ  
	Ǵ°.. .. ? ޽ ° SendMessage() PostMessage(), 
	Perform() ߿ ƹų   Ǳ. ׷ϱ, 
	ġƮ Ѱ踦 4ް 缳Ϸ  ϸ .. 
	SendMessage(RichEdit1->Handle, EM_EXLIMITTEXT, 0, 4194304); 
	
	? ..  ˱    ƴ   ʴϴ. 
	 ġƮ  ġ ̸鼭 ġƮ  ޽ 
	 Ÿٰ 쿬 ˰ Ȱ̴ϴ. 
	ʿϽ в   Ǳ ٶϴ.

3 / ! Ÿӿ Ʈ 巡ϱ...
	 Ÿӿ Ʈѵ Ŭؼ ̵,  巡  ֳ...? 
	𸦶 û ϰ  ؾ Ѵٰ  ߾µ, 
	    ߰ϰ, ~ ߴϴ. 
	
	̷ ó ؼ, 巡 Ʈѿ WM_SYSCOMMAND ֱ⸸ ϸ ˴ϴ. 
	 ޽  , , ݱ, ũ  涧 
	߻ϴ ޽μ,  32   ڼ ɼǵ ɴϴ. 
	
	.. M$  ⿡   ִ ɼǵ   
	ʾҴٴ Դϴ.  , ణ ° ߸ غ, 
	翬 츦 巡ϴ   ޽     ֽϴ. 
	
	⿡ ̴ ڴ, ũη ǵ  ڷ,  0xf012 Դϴ. 
	׷ϱ 巡 쿡 WM_SYSCOMMAND ޽ lparam 0xf012  
	 Ǵ°̴ϴ. ڵ, 
	
	void __fastcall TForm1::Panel1MouseDown(TObject *Sender, TMouseButton 
	        Button, TShiftState Shift, int X, int Y) 
	{ 
	   ReleaseCapture(); 
	   Panel1->Perform(WM_SYSCOMMAND, 0xf012, 0); 
	} 
	
	  ϸ . ReleaseCapture()  ʿ  ؼ... 
	 32  Ͻñ ٶϴ. ( , ϱ⵵ ٷӽϴ.) 
	
	   TI  Դϴ. 
	
	,  ̸ ٲٴ  巡 ¡,  巡Ͽ Ʈ 
	ũ⸦ ϴ ɼǵ ֽϴ.  쿣  8 ⿡ شϴ 
	ɼ ߰Ͻ  ̴ϴ. , ã ŵ  ʿϽ  
	Ͻø ˷帮 .

 
4 / ! ø̼ ּȭ· ϱ
	 , ø̼ ۾ǥٿ ~ 帰 · Ƣ 
	 ̴ϴ. ۾ǥٿ Ÿ  ָ ȵ  
	 ǰ? 
	
	  ΰ WM_QUERYOPEN ޽Դϴ.  ޽ ּȭǾִ  
	Ŭϰų ؼ   Ű Ҷ ߻մϴ.  ޽ 
	ƸԾ(?)  ۾ǥ (޶پִ  ) Ŭص 
	ƹϵ Ȼϴ. ̷ ó ؼ,   ޽ WM_QUERYOPEN 
	޽ ϵ ޽ ڵ鷯  ˴ϴ.  ¿ 
	 ޽ ϵ սô. 
	  Ŭ protected: ǿ(ٸ ǿ ص ū  ϴٸ 
	Ƽ ϴ  ϹԴϴ.  ׷  Ͻ ϽŴٸ 
	« ż Ŭ ٽѹ غô° ڽϴ.) ߰մϴ. 
	
	void virtual __fastcall WMQueryOpen(TMessage& Msg); 
	
	׸  ڰ ִ public:   , ׷ϱ Ŭ 
	 κп   ޽ ۼսô. 
	
	BEGIN_MESSAGE_MAP 
	    MESSAGE_HANDLER(WM_QUERYOPEN, TMessage, WMQueryOpen) 
	END_MESSAGE_MAP(TForm) 
	
	׷,    Ͽ ޽ڵ鷯 ָ ǰ? 
	 մϴ. 
	
	void __fastcall TForm1::WMQueryOpen(TMessage& Msg) 
	{ 
	    Msg.Result = 0; 
	} 
	
	(?) ? ^^  ޽ڵ鷯 , WM_QUERYOPEN ޽  
	 װ ܲ~ ѹ ̴ϴ. ׷ 翬    ʰ? 
	
	 Ȳ   Ǿ Ҷ ְ Ǿ ȵ 쵵 ִٸ 
	 ޽ڵ鷯  if  ˻ָ ǰڳ׿. 
	
	׷, ε Ϸ   Ͻñ ٶ鼭, ̸... 
	
	
5 / !  ã̾α ϱ
	  ã ̾α׸ ϴ  ˷帮.. 
	  ƽð  ã ̾α״ ȭϷ Ǿִ° ƴ϶ 
	ϵũ ϸ  ҿϴ. 
	 ã ̾α׸ ϱ ؼ DDE ؾ մϴ. 
	 հŸ DDE Ѵð ű⺸.. ҽ 帮. 
	κ   ̻ ٸ  ʿϽ  ű.. 
	
	Ʒ ̺Ʈ ڵ鷯  丮 Ʈ ˻ 丮  
	ä ã ̾α׸ ݴϴ. 
	
	#include <ddeman.hpp> 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    TDdeClientConv *DdeClientConv = new TDdeClientConv(this); 
	    DdeClientConv->ConnectMode = ddeManual; 
	    DdeClientConv->ServiceApplication = "explorer.exe"; 
	    DdeClientConv->SetLink("Folders", "AppProperties"); 
	    DdeClientConv->OpenLink(); 
	    DdeClientConv->ExecuteMacro("[FindFolder(, C:\\Windows)]", false); 
	    DdeClientConv->CloseLink(); 
	    delete DdeClientConv; 
	} 
	
	ݵ ddeman.hpp Ŭ ؾ մϴ. 
	
	    faq Ͽϴ. 
	
	׷, ǽñ ٶ鼭, ̸... 

 
6 / ! url / html ȭ 
	 .. ּҳ ϵũִ htmlȭ Դϴ. 
	Ʈ  Ű  ּҸ  ϴ ڵ   
	˷ μ, ShellExecute() api Լ մϴ. 
	
	 , Ʈ   www.inprise.com  Ϸ, 
	ShellExecute(0, "open", "http://www.inprise.com", "", "", SW_SHOWNORMAL); 
	̷ ָ ˴ϴ. 
	
	ShellExecute()Լ ι° ڷ "open"  Ʈ ° 
	("http://www.inprise.com")  α׷  ݴϴ. 
	׸ ׹°  ڿ Ķͷ . 
	
	̰ ϸ, htmȭ д ͵   մϴ. 
	C:\111.htm ȭ Ϸ, 
	ShellExecute(0, "open", "file:///c:/111.htm", "", "", SW_SHOWNORMAL); 
	  ָ ˴ϴ. ̶ "file:///"  ٴ Ϳ ؾ մϴ. 
	 Ⱥٿָ... ȵȴϴ. ^^ 
	̰ 翬 μ,  ̰  url ּҷ ؼϱ  
	. ׷ file:///  ٿ ϴ°̴ϴ. 
	
	ShellExecute()Լ Ư ϵ  α׷    
	ȭ  ϴµ  մϴ.  Լ   ݵ 
	shellapi.h  Ŭ մϴ. 
	
	׷, ǽñ ٶ鼭, ̸... 

 
7 / ! Ŭ  
	 ÷帮     /亯  亯Դϴ. 
	, Ʈ ۳Ʈ ڰ  ؼ ϸ ڵ  
	 Ư ķͷ  Դϴ. 
	 FindWindow() Լ    ѵ,  Լ api Լμ 
	ù° ڴ Ŭ, ι° ڴ ̸(  ĸ) 
	 Ѱָ ش  ڵ մϴ. Ʒ 쿡 ķ 
	ŸƲ ڷ Ѱָ ǰڱ. ׷Ŀ SendMessage WM_PASTE ޽ 
	  ˴ϴ. 
	
	  :[] Ŭ忡 Ǵ°  
	:ȫȯ  (hhs1979 )    08/12 16:17  ȸ:26  1/2 
	 
	ȳϼ?  ʺԴϴ. 
	Ŭ忡   Ǵ° ؼ 
	   óҷ ϴµ 
	 Ǵ°   ϴ ˰ ͽϴ. 
	׸  Ѱ 
	 ó  ſķͿ ڵ ٿֱ Ϸ ϴµ 
	̰ ȵɰ .. ׳ ڰ ٿֱ ٿ־ ҰͰ 
	ڵ ٿְ  ֳ? ׷  ? 
	
	亯 Ź帳ϴ. 
	
	
	  :[亯/1395] Ŭ  ... 
	:â  (t9580   )    08/13 07:40  ȸ:74  1/3 
	 
	
	ȳϼ. ģƵڸ ̾ ľ 縮׸Դϴ. 
	Ͻ Ͱ  copy  ä   غôµ.. 
	ּ   𸣰ڱ, · Ǳ ϴ. 
	 Ʈ Ʈ WM_COPY ޽ ä  ޽ڵ鷯 ۼؾ 
	ϰڴµ,  ޽ڵ鷯 Ʈ Ʈ Ŭ   ǰڴ 
	. ׷ ϴ Ʈ ӹ Ŭ ϳ ,  Ŭ ȿ ޽ 
	 Ͽϴ. 
	BEGIN_MESSAGE_MAP 
	    VCL_MESSAGE_HANDLER(WM_COPY, TMessage, OnCopy) 
	END_MESSAGE_MAP(TEdit) 
	
	׸ ⼭  ̸  OnCopy ޽ ڵ鷯 . 
	Ŭ  .. 
	MESSAGE void OnCopy(TMessage &msg); ䷸.. 
	׸ Ǵ.. 
	MESSAGE void TXEdit::OnCopy(TMessage &msg) 
	{ 
	    Caption = "11"; 
	} 
	 TXEdit  Ʈ ӹ޾  Ŭ ̸Դϴ.  Ŭ 
	 ƹ͵ ,  WM_COPY ޽ ä°. 
	½Ʈ ؼ ׳ ĸǸ ٲٵ ޽ϴ. (Ե.. Ǽ.. ~ 
	Ʈ ĸ ٲ.. Ʈ ĸ µ) 
	
	̷ ϰ ϴ  ˴ϴ. (ϰ Ʈ ĸ ٲٴ.. --;;) 
	
	׸ ι° .. ش ķ ڵ ãƼ WM_PASTE ޽  
	  ذǰڱ.. 
	׷ ǽñ ٶ鼭, ̸...

 
8 / ! exe/dll  о
	 .. ܺ exe, dll  ȭϵ鿡  о Դϴ. 
	õ      ÷ȴ 亯 ٽ øϴ. 
	iclȭϵ  Ȯڸ ٲ 16Ʈ dll̹Ƿ   о  ֽ 
	. Ʒ ø ƽð, API Լ ϳ Դϴ. ٵ   ϳ 
	 Ŀ α׷    ϰ ִ е ִ 
	. ... ׷, ǽñ ٶϴ. 
	
	  :[] dll ִ  д ...?? 
	:â  (BlueNOAH)    10/09 21:55  ȸ:18  1/1 
	 
	dll ִ  ε Ϸ  ؾϳ? 
	dll   ִ  ImageList ҷ̴°? ƴϸ 
	Ѱ о̴°? 
	
	
	  :[亯] dll ִ  д ...?? 
	:  (cbuilder)    10/10 13:19  ȸ:53  1/2 
	 
	縮׸Դϴ. 
	DLL ȭϿ  °  մϴ. DLLӸ ƴ϶ 
	 ȭ̵  ȭϿ ִ  ҽ · Ե ̶ 
	  ֽϴ. API Լ ExtractIcon ~Ex Լ Ͻñ ٶ 
	ϴ.  ... Ķͷμ  ִ ȭϰ   
	ε Ѱָ  ڵ,  HICON ݴϴ. 
	׷ϱ... TIcon *  ӽ  ϳ , Ų Ŀ  TIcon * 
	 ڵ鿡 ExtractIcon() Ѱܹ HICON ָ ˴ϴ. 
	Ⱦ  ...  ڸ... 
	TIcon *TempIcon = new TIcon; 
	TempIcon->Handle =ExtractIcon("c:\\Program Files\\Acdsee32\\Scdsee32.exe",0); 
	ó ϸ (Ȯ 𸣰ڽϴٸ  ̷̴ϴ..) TemppIcon 
	Acdsee ù°(0°)  Ѿɴϴ. 
	 Լ ̿ϸ... δ  ȭϿ ִ    
	˾Ƴ  ־  ϴ. 
	׷, ǽñ ٶ鼭, ̸...
 
9 / ! Ʈ vs. Ʈ
	 ,  ȥϽô ƮѰ Ʈ   
	/亯Դϴ.   亯ߴ  ٽ ø ̴ϴ. 
	Ʈ/Ʈѿ  ǹ  е鲲  Ǳ ٶϴ. 
	
	  :[]  ƮѰ  Ʈ 
	:ȫȯ  (hhs1979 )    10/18 17:46  ȸ:15  1/2 
	 
	  ⿡ е忡    
	  ְ Ϸ ϴµ  Ʈ̳  Ʈ ̿ϴ 
	   Ʈ  Ʈ     Ʈ 
	 Ʈ   ְ ϴ°ΰ .. ´? 
	
	׷   ɰ   Ʈ ϴ   ? 
	  Ϸ 밭  ؾ    ּ. 
	
	  :[亯]  ƮѰ  Ʈ 
	:  (cbuilder)    10/18 18:42  ȸ:27  1/2 
	 
	    뷫  ƽô  ׿. 
	ƮѰ Ʈ κ Ư¡ մϴٸ... 
	(HotTrack, MultiLine, TabPosition,  Ƽ  ֽϴ) 
	߿  ϳ ֽϴ. Ʈ  Ǹ ִ Ʈϻ, 
	   ʽϴ. δ Ʈ ϳ,    
	̴ϴ. ݸ鿡  Ʈ TTabSheet  ü  
	 ־,       ֽϴ. 
	  ϴ , Ʈ  TStrings Tabs 
	ο ڿ ߰ϸ ,  Ʈ TTabSheet ü 
	 оƮ Ʈѷ ִ, Ϲ Ʈ   
	  մϴ. 
	
	̸ŭ  ġä̰, ȯ Ͻô ۾  Ͻð 
	ôٸ, Ʈ ϴ     ϴ.   
	Ʈ Ѵٸ, ޸  ġƮ ޸ Ʈ Ź 
	ٽ εϵ Ȥ   ٲ𶧸 Ư ޸ Ű  
	κ Ű,  ŷο ڵ ǰڱ. 
	
	׷, ǽñ ٶ鼭, ̸...

 
10 / ! ȽýƮ c_str() Լ
	.. ȽýƮ Լ char * ִ c_str()Լ 
	 ˾ƺô..   亯ߴ ̱.. 
	ȽýƮ    ü ƽð  , Ʒ 
	, source/vcl 丮 ִ dstring.cpp Ͻø ˴ϴ. 
	(ȽýƮ  vcl  c++ڵ.) 
	׷, ǽñ ٶ鼭, ̸... 
	
	
	
	  :[]String->char* ȯ... 
	:  (Soulfire)    11/02 02:46  ȸ:11  1/2 
	 
	TEdit->Text  ڹ迭 ű     ... 
	
	char* Temp; 
	
	Temp = Edit1->Text.c_str(); 
	
	̻ϰԵ ó ټڱ Ű  ߷ϴ. 
	(ó ׹° ڱ , ټ° ڴ ̻  ڵ ٲ) 
	׷  غ F7  ܰ踦 ϳ  캸 
	   Űµ...̶ ߿  ϴ  
	Access Biolation Error( ...ٸ ϼ .) ±. 
	ƹ Memoryʿ   ִ° ٴ  µ... 
	Ȯ    𸣰ڽϴ. 
	
	˰ в ε 亯  ֽñ... 
	翬 ̻  ˾Ҵ κ ̷  ̴ٴ...--;;; 
	׷...ſ  ǽñ... 
	
	PS:׸  о c_str()Լ ϸ ο ڹ 
	   Ͱ ϵǰ Ǵ  ...߿ 
	delete[] Ἥ    迭 ־ ϳ? 
	̹ ؼ 亯 ֽø ϰڽϴ. 
	
	
	
	
	  :[亯] String->char* ȯ.. 
	:  (cbuilder)    11/02 03:20  ȸ:28  1/3 
	 
	縮׸Դϴ. 
	ȽýƮ ؼ ߸ ƽð ô° ϴ. 
	AnsiString Լ c_str() ޸𸮸 ҴϿ ڿ  
	ʽϴ. ܼ ͸ Ѱ. 
	
	AnsiString Ŭ ǰ ִ dstring.h ø Ȯ ƽ   
	̴ϴ.  Ŭ , ȽýƮ ʹ char * Դϴ. 
	׸ c_str()Լ   ϰ   Ǹ Ѳ 
	ϴ. 
	
	   char* __fastcall c_str() const 
	   {return (Data)? Data: "";} 
	
	ٽ ؼ, c_str()Լ   char *  Date ͸ Ѱ 
	ذ̴ϴ. ׷Ƿ c_str() Լ    ϸ鼭   
	ϴ.  ȽýƮ ü   ޸𸮸 ϰ ٽ 
	Ҵ 츦 ϸ Ϲ ʹ  ġ  ̹Ƿ 
	翬 ＼̼̾ ϴ. ׸  ȽýƮ ü  
	 ޸𸮸 Ҵ/ߴ    Ҽ ϴ. 
	
	Ͻ ڵ   Ǿ ϰڳ׿. 
	
	#include <string.h> 
	... 
	char *Temp = new char[Edit1->Text.Length+1]; 
	strcpy(Temp, Edit1->Text.c_str()); 
	... 
	delete[] Temp; 
	... 
	
	׷, ǽñ ٶ鼭, ̸...

 
11 / ! Ʈ  ٲٱ
	õ  Ŀ ÷ȴ 亯 ܾԽϴ.(̰ ..    
	  ãƼ ˷帱ٵ.. ~ ^^) 
	  ܼѰ... Ʈѿ ڵ   ٲٴ 
	Դϴ. ׷... ǽñ... ^^;;; 
	
	
	
	  :[] Ʈѿ..  ٲٴ. 
	:  (PJH0605 )    10/02 00:35  ȸ:27  1/1 
	 
	Ʈѿ  ٲٷ  ? 
	
	AcitivePage ٲ ϳ? ? 
	
	׷...... 
	
	
	
	
	  :[亯] Ʈѿ..  ٲٴ. 
	:  (cbuilder)    10/02 06:48  ȸ:41  1/1 
	 
	縮׸Դϴ. 
	ϽŴ  Ʈ Ȱ ٲٷ TPageControl Ƽ 
	 ActivePage ٲٽø ˴ϴ. ,  Ƽ  ϰ int 
	ε ƴ϶, TTabSheetԴϴ. ׷, ڵ   ǰ. 
	
	PageControl1->ActivePage = PageControl->Pages[0]; 
	
	,  ڵ 0°  Ȱȭ Ű ̴ϴ. 
	׷ ǽñ ٶ鼭, ̸... 


 
12 / ! ٸα׷ Ű...
	ð  ʾƼ..   ϳ ˷帮. 
	ٸ α׷ Ű... . ش α׷  ڵ鿡ٰ 
	WM_QUIT޽ ָ ˴ϴ.  FindWindow API Լ ̿ϱ. 
	׷, ڵ   ϸ ǰ? 
	
	PostMessage(FindWindow(NULL, "window caption"), WM_QUIT, 0, 0); 
	
	, SendMessage Լ ص  ϰ? 
	׷, ǽñ ٶ鼭, ̸... 




13 / ! üȭ鿡 ϱ~
	, 츦   ׳ ũ ü   ϴ . 
	Ʒ ø ˰,   ٽ    ֽϴ. 
	
	  :[]  쿡 ׸ ׸? 
	:  (  )    11/04 21:14  ȸ:13  1/2 
	 
	ȳϼ.. ϴ.. 
	 ũ.. XOR  ׾ ϴµ.. 
	.. ׷ϱ.. ٰ  Űٰ 
	ܻ ° ? 
	
	 XOR  ׾ ϴµ.. 
	  ұ? 
	ȭ ĸؼ ġ  ƴ.. 
	
	α׷ ưµ..  ׾.. 
	ִϸ̼ ȿ ִ α׷ Ҵµ.. 
	װ   մϴ. 
	 ؾ ұ? 
	
	
	
	
	  :[亯]  쿡 ׸ ׸? 
	:  (cbuilder)    11/05 08:58  ȸ:24  1/2 
	 
	縮׸Դϴ. 
	 ٵ.. ϴ  帱 ִ 亯 帮. 
	
	ũ ü DC ޾Ƽ ׷ָ ˴ϴ. ũ DC GetDC(0); ϸ 
	Ѿ, DC  ׸ apiԼ ״ ڸ  ϱ 
	 ĵٽ ϳ  Ҵְ ״ ׷ָ ǰڳ׿. 
	׷ϱ.. 뷫 ڵ  ... 
	
	TCanvas *ScreenCanvas = new TCanvas; 
	ScreenCanvas->Handle = GetDC(0); 
	ScreenCanvas->MoveTo(0,0); 
	ScreenCanvas->LineTo(Screen->Width, Screen->Height); 
	ReleaseDC(0, ScreenCanvas->Handle); 
	delete ScreenCanvas; 
	
	̷ ϸ ȭ ʻܿ ϴ   Ҿ~ ׷ϴ. 
	
	׷, ǽñ ٶ鼭, ̸...

 
14 / !  ۳Ʈ TList ...
	 ۳Ʈ Ҷ,   Ȯ   ų    TList 
	 ۳Ʈ  ͸ մϴ.   ̴ ڵ. 
	׸  ? Ʈ ü Delete ޼ҵ带   ۳Ʈ ɱ?
	
	... "ȵȴ" Դϴ.  ȴٰ ϱ . 
	,   غ ̰  ƴ ݹ ˼ ֽϴ. 
	۳Ʈ Ϸ  ۳Ʈ destructor ȣؾ մϴ. 
	׸ destructor ȣϷ 翬  destructor ִ Ŭ ˾ƾ մϴ. 
	ٽ ؼ, type 𸣸 destructor ȣ  ,  ۳Ʈ 
	 Ұմϴ. 
	׷ TList ü  ü void * մϴ. 翬 TList ü 
	Delete ޼ҵ ۳Ʈ   ϴ.
	
	    ư  ߴٰ սô.
	TList *MyButtonList = new TList; 
	for(int i=0; i<100; i++) 
	{ 
	    TButton *TempButton = new TButton(this); 
	    TempButton->Parent = this; 
	    MyButtonList->Add(TempButton); 
	} 
	  ۳Ʈ    ؾ մϴ. 
	while(MyButtonList->Count) 
	{ 
	    delete dynamic_cast<TButton *>(MyButtonList->Items[0]); 
	    MyButtonList->Delete(0); 
	} 
	
	 α׷ֿ ͼϽ е鵵 ǿܷ ǼϽñ  κ. 
	׷ ǽñ ٶϴ... 
	
 
15 / !  Ʈ 
	 ù ӿ  , Ư Ŀ  Ʈ 츦 ÷ϴ 
	   öԾ.    vcl ϴ  Ʈ 츦 Ͽ ذϷ ߾µ.. ۿ    Ա.
	
	 ذ  ƴϱ,     µ ű⼭ ٸ Ͻ  
	ؼ ( ̵:ba1004) 亯 ּ̽ϴ. 
	 ϰԵ... TWintWindow Ŭ ִ. ⿡ ޸𸮸 Ҵϰ  ǥ TRect, ׸ ڿ AnsiString Ѱְ ActivateHint Լ ȣϸ Ʈ 찡 ~ ߴ. (... Ʈ Ŭ    ߽ϴ.) 
	
	· Բ 帮, Ʒ ҽ  ҽ Ͽ ̴ϴ. 
	 غ۾,  Ʈ  ǵ ߷,  Ʈڿ Ƿ ֽϴ. ShowHint Ƽ   ϴ. ׳ Ʈ ڿ оðŴϱ. 
	׷Ŀ   ڵմϴ. 
	
	// ȭ 
	//--------------------------------------------------------------------------- 
	#ifndef Unit1H 
	#define Unit1H 
	//--------------------------------------------------------------------------- 
	#include <Classes.hpp> 
	#include <Controls.hpp> 
	#include <StdCtrls.hpp> 
	#include <Forms.hpp> 
	//--------------------------------------------------------------------------- 
	class TForm1 : public TForm 
	{ 
	__published: // IDE-managed Components 
	    TEdit *Edit1; 
	    TEdit *Edit2; 
	    TEdit *Edit3; 
	    void __fastcall Edit1Enter(TObject *Sender); 
	    void __fastcall Edit1Exit(TObject *Sender); 
	private: // User declarations 
	public:  // User declarations 
	    THintWindow *MyHint; 
	    __fastcall TForm1(TComponent* Owner); 
	}; 
	//--------------------------------------------------------------------------- 
	extern PACKAGE TForm1 *Form1; 
	//--------------------------------------------------------------------------- 
	#endif 
	
	
	
	//  ҽȭ 
	//--------------------------------------------------------------------------- 
	// Thanks to (:ba1004) 
	//--------------------------------------------------------------------------- 
	
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "Unit1.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	#pragma resource "*.dfm" 
	TForm1 *Form1; 
	//--------------------------------------------------------------------------- 
	__fastcall TForm1::TForm1(TComponent* Owner) 
	    : TForm(Owner) 
	{ 
	} 
	//--------------------------------------------------------------------------- 
	void __fastcall TForm1::Edit1Enter(TObject *Sender) 
	{ 
	    TControl *SenderControl = dynamic_cast<TControl *>(Sender); 
	    MyHint = new THintWindow(this); 
	    MyHint->Brush->Color = RGB(255, 255, 224);    //  :0x00E0FFFF 
	    AnsiString HintString = SenderControl->Hint; 
	    RECT r = MyHint->CalcHintRect(200, HintString, 0); 
	    TPoint pt = ClientToScreen(Point(SenderControl->Left, SenderControl->Top+S 
	enderControl->Height)); 
	    OffsetRect(&r, pt.x, pt.y); 
	    MyHint->ActivateHint(r, HintString); 
	} 
	
	 
	//--------------------------------------------------------------------------- 
	void __fastcall TForm1::Edit1Exit(TObject *Sender) 
	{ 
	    if(MyHint) 
	    { 
	        MyHint->ReleaseHandle(); 
	        delete MyHint; 
	        MyHint = NULL; 
	    } 
	} 
	//--------------------------------------------------------------------------- 
	
	̷ ؼ ؼ غ, Ŀ ִ Ʈ ٷ Ʒ Ʈ찡 ϴ.
	 ̷  Ʈ ΰ  ֽϴ. 
	 Ʈ  Ʈʹ ̱   Ʈ ShowHint true  
	 ΰ Ʈ øǾ   ֽϴ.  Ѱ , ø̼ ü 
	ƼƮǾ,  ٸ α׷ Ȱȭ Ǿ   Ʈ 찡 ״ 
	ֽϴ.   ذϷ ø̼ OnActivate OnDeactivate ڵ带 
	༭ ׶ Ʈ ֵ ؾ߰.
	
	׷ ǽñ ٶ鼭, ̸...

 
16 / ! TRect  ...
	 TRect, RECT ü õ  ܾƺô. 
	
	TRect  ,  ͸ Left, Top, Right, Bottom  
	 ǥ TopLeft ʾƷ ǥ  BottomRight Ͼ Ǿֽϴ. 
	׷  TRect r;   ߴٸ, r.TopLeft  簢   
	ǥ Ÿ TPoint üԴϴ. 
	
	 ǥ TRect ü ü     ̴ Լ vcl Լ 
	Rect()Դϴ.left, top, right, bottom  ޾Ƽ TRect ü ݴϴ. 
	̰ Point() Լ x, y  ޾Ƽ TPoint ü ִ Ͱ  
	Դϴ. 
	
	̿ ϰ left, top, width, height  TRect ü ޾ƿ  ִ 
	Լ vcl Լ Bounds()Դϴ. װ  ־ָ TRect ݴϴ. 
	width height ϹǷ ϰ width = right - left; ̷ ϴ  
	  ϰ. 
	
	Ʈѵ TControl::BoundsRect Ƽ  簢  ˾Ƴų Ųٷ 
	   ֽϴ. TControl::SetBounds() Լ left, top, width, 
	height  ǥ ϴ Ͱ  񱳰 . 
	 TRect r = Rect(10, 10, 400, 350); ̶  r ǥ  ǥ 
	߷ this->BoundsRect = r; ̶ ϸ ˴ϴ. (this->~    
	׳  ڵ尡    Ϸ Ѱ..) 
	
	
	TRect  RECT ȣ ȣȯ . ׷ RECT  ٷ  
	API Լ ״   ֽϴ. InflateRect() Լ  x, yŭ 
	/̸ /ҽݴϴ. ̿ ϰ OffsetRect() Լ ġ 
	 ŭ Ű(move)ݴϴ. UnionRect() ϸ  RECT ǥ  
	  ݴϴ. 
	PtInRect() Լ   RECT  ִ ˷ִ Ҹ ԼԴϴ. 
	ϰ . 
	
	
	... ʹ ǰؼ..   غϱⰡ  ׳ ´ ŷ 
	ýϴ. ,  ϰ? ^^;;; 
	
	׷ ̸... (ھ.. ....) 
 
17 / !  ƴ...
	 .. ε ũ..Դϴ. 
	
	 ö ߿,   Ϸ  ǺϿ 
	    ִĴ  öԾ..  ȳ 亯 
	ߴµ.. ̶  亯 ϼ̴.. ~! 
	߽ϴ..  徾 ׷̵... ... 
	#if (__BORLANDC__ < 0x0530) 
	... (3 ) 
	#else 
	... (3 ƴ ) 
	#endif 
	 3 ù° ... κ ϵ˴ϴ. 
	 1̶   0x0520 ˴ϴ.    Ϸ . 
	3 徾 5.3̰, 1 5.2̴ϱ. 
	 __BORLANDC__  ͺ 1.0̴  __TURBOC__ · ̴ִϴ. 
	__TURBOC__   밡ϱ,  ͺ++ ϴ 
	__TCPLUSPLUS__   밡մϴ.   Ȱ 3 0x0530Դϴ. 
	
	(ϰ ־󾾴 __MS_C__, ϴ ũΰ ֽϴ.  ѹ 
	.  10.0 ̸̻  ־󾾿 ϴ. 
	 ͺ   ϰ ׷ α׷ ҽ 
	ۼϸ鼭 ̴ϴ.) 
	
	Ϸ  Ǻϴ ̵ ũ ܿ   ũΰ ֽϴ. 
	  __DATE__  ð  Ʈ  ֽϴ. 
	__TIME__  ð̱, __FILE__ ϳ, __LINE__  ٹȣԴϴ. 
	
	 ̴  ƴ.. 𸣰 ִٰ ߿ ʿϸ Ȳ . 
	
	׷, ǽñ ٶ鼭, ̸...
 
18 / !  ۾ǥٿ ǥϱ..
	 ,  ƴ  ۾ǥٿ  ǥϱ Դϴ. 
	 , ݽ   ݽ ׺Ϳ    
	۾ǥٿ  ǥõ? ׷  ø̼ ϳϴ. 
	 ̷ ũ ʿҶ ִµ..  ׷ , 
	۾ǥٿ ǥõǴ   ϳ ø̼̾ Ѵٰ.. 
	 鵵 ۾ǥٿ  ǥðϴϴ. 
	
	 TWinControl  CreateParams() Լ ̵ϴ Դϴ. 
	 Լ  ڵ  Ʈ( ϳ ) ȭ鿡 
	Ÿ Ư̳  մϴ. api ̶ غ  
	api ϴ CreateWindow()Լ Ѱִ ڵ  ϴٴ  
	Ͻ?  CreateParams() Լ CreateWindow()Լ Ѱ 
	ڵ ϴ  Ѵϴ.   Controls.hpp, .pas 
	ø ǰڱ.. 
	·,  Լ ̵ ϸ鼭  Ÿ ָ ˴ϴ. 
	ҽ ô. 
	
	void __fastcall TForm2::CreateParams(TCreateParams &Params) 
	{ 
	    TForm::CreateParams(Params); 
	    Params.ExStyle := WS_EX_APPWINDOW; 
	    Params.WndParent = GetDesktopWindow(); 
	} 
	
	̰ ι° , ׷ϱ  ҽ ְ߰..(  ̸ 
	Form2϶ Ѱ̴ϴ.) ׸      ߰ . 
	protected: 
	    void __fastcall CreateParams(TCreateParams &Params); 
	
	̷ ϰ غ... Ե! ι°  ۾ǥٿ ´ϴ! 
	? ^^;;; 
	
	ٵ.. ˰    ˷ ִ°Ŷϴ. ű.. ణ  
	־..  ̴ϸ ع ι°  ۾ǥٿ ~ 
	׸ ٽ  ̰ ϸ ι°  ۾ǥٿ Ÿ.. 
	̰ ι°   ڵμ (vcl ʰ ƴմϴ) ̱ 
	Դϴ. ׷  Ⱥ̴ ° Ǹ    
	ܹŵ. ׷...   Ǯ? ^^ 
	
	,  CreateParams() ι°  ʸ ٲ ˴ϴ. 
	 Դ, ũž ʷ ° . 
	ҽ ô! 
	
	void __fastcall TForm2::CreateParams(TCreateParams &Params) 
	{ 
	    TForm::CreateParams(Params); 
	    Params.ExStyle  := WS_EX_APPWINDOW; 
	    Params.WndParent = GetDesktopWindow(); 
	} 
	
	 Ÿ մϴ. 
	
	̷ ϸ,  ּȭǾ ι° ۾ǥٿ ִϴ! 
	~~? ^^;;;;; 
	
	 帮... ׳ Դϴ.. ٰ   
	CreateParams() ̵ؼ Ÿ WS_EX_APPWINDOW ָ... 
	~! ۾ǥٿ Ʈ ü  ׸  ܹϴ! 
	... ƽô   ƽð, vcl     찡 
	ƴϱ . ׷     и Ѱ̴ϴ. 
	..  и  ø  . 
	
	 ..   Ÿµ.. ͳ    Ȩ 
	 Դϴ. 
	
	׷, ǽñ ٶ鼭, ̸...

 
19 / !  ã̾α ϱ
	 ,  ã̾α ϱ Դϴ.. 
	  ʾҳı? . ٵ.   غô. 
	 ShellExecute() Լ غ.  DDE ̿ؼ ߾? 
	(DDE ̿ ã̾α  1469 , ׸ ShellExecute()Լ 
	ؼ 1473  ϼ~) 
	
	  ࿡ õ, ShellExecute() ù° ڷ "open" Ŀǵ带 
	Ѱָ Ǿ. ̹  , ĸǵ "find" մϴ. 
	 缳 þ⺸... ô. 
	
	ShellExecute(Handle, "find", NULL, NULL, NULL, SW_SHOWDEFAULT); 
	
	̷Ը ָ ã ̾αװ ~ ϰ ϴ. 
	ٵ..  ƹ͵ ɼ ı. . ã  丮    
	ֽϴ. ٵ,    ɼ    . 
	
	ShellExecute(Handle, "find", "c:\\windows", NULL, NULL, SW_SHOWDEFAULT); 
	
	̷ ϸ ã  丮 c"\windows   ä ϴ. 
	
	 ã ̸  Ѵٸ.. WM_KEYDOWN ~UP ޽, ׸ WM_CHAR 
	޽  ã ̾α  ڵ鿡  Ǳ ϰ? 
	
	ٵ.. ̷    ִµ   DDE Ἥ    
	˷ı? ~ ֱ ְھ~ ׶    ׷~ --;;;; 
	
	׷ ǽñ ٶ鼭, ̸... 

 
20  /  ! Status bar Progress bar ~
	 , ͽٿ α׷ Դϴ.. 
	 α׷ٸ   ° Ϲ, Ϻ α׷ α׷ٸ 
	ͽٿ     ֽϴ. 
	׸  쿡 ̷ ̽ ô   . 
	
	ٵ..   Ϸ ͽٿ α׷ٸ ÷~?
	ȵ˴ϴ!  win32 Ʈ status bar ٸ Ʈ  ִ ̳ Ʈε,
	vcl  (?) س ſ ٸ Ʈ ÷  ϴ.. ׷ ؿ??
	
	ī ī.. .. Ÿӿ ȵǸ Ÿӿ ÷ ~
	...  ڵ带 ô.
	
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	    ProgressBar = new TProgressBar(StatusBar1); 
	    ProgressBar->Parent = StatusBar1; 
	    ProgressBar->Position = 0; 
	    ProgressBar->Visible = false; 
	} 
	
	  ProgressBar    TProgressBar *ProgressBar; ͸ . 
	( 𸣽ô е Ʈ    ٽ  ʿ䰡 ְڳ׿~)
	
	ھ.. ̷ ϸ ¹ α׷ٰ  մϴ. ( ʿҶ 
	̷ .) 
	׷..  ͽٸ гε ,  гο ƹ   
	 ù° г ׻  ũ ?  α׷ٴ ù° гο 
	; ̳µ, ù° г ũ ڴ ر׸İ ü ۿ .. 
	
	׷  ڵ鷯 ϳ  ۼսô.     
	ͽٸ Ŭؼ νͿ OnResize ̺Ʈ Ŭ,  ڵ鷯 
	ۼغô. 
	
	
	 
	void __fastcall TForm1::StatusBar1Resize(TObject *Sender) 
	{ 
	    int Size = StatusBar1->Width; 
	    for (int i=1; i<StatusBar1->Panels->Count; i++) 
	      Size -= StatusBar1->Panels->Items[i]->Width; 
	
	    //resize the first panel based on the form width 
	    StatusBar1->Panels->Items[0]->Width = Size; 
	    RECT Rect; 
	    StatusBar1->Perform(SB_GETRECT, 0, (LPARAM)&Rect); 
	
	    ProgressBar->Top = Rect.top; 
	    ProgressBar->Left = Rect.left; 
	    ProgressBar->Width = StatusBar1->Panels->Items[0]->Width; 
	    ProgressBar->Height = Rect.bottom - Rect.top; 
	} 
	
	! ̷ ϸ,  ص ͽٿ ũⰡ ϴ г   ƴ϶ 
	ù°   ȴϴ.  α׷ٵ  ũⰡ ϱ.  ? 
	α׷ٴ ʿ  ܿ ̸ ȵǴϱ.. 
	׷   α׷ٸ ô. 
	 Ÿ̸Ӹ ϳ ,  OnTimer ̺Ʈ ڵ鷯   ۼմϴ. 
	
	void __fastcall TForm1::Timer1Timer(TObject *Sender) 
	{ 
	    if(ProgressBar->Position >= ProgressBar->Max) 
	    { 
	        Timer1->Enabled = false; 
	        ProgressBar->Position = 0; 
	        return; 
	    } 
	    ProgressBar->StepIt(); 
	} 
	
	׸  ư ϳ ,  OnClick ̺Ʈ ڵ鷯 ۼսô. 
	void __fastcall TForm1::SpeedButton2Click(TObject *Sender) 
	{ 
	    ProgressBar->Visible = true; 
	    Timer1->Enabled = true; 
	} 
	 
	̷Ը ָ ϼ~! 
	ư ָ ͽ ù° гο α׷ٰ Ѵϴ. 
	~   Ǿ? 
	
	...     ˾Ƴ ƴϰ.. ~  ߴµ, 
	Mitov's C++Builder Page   Ѱ̴ϴ. 
	ּҴ... http://members.xoom.com/mitov Դϴ. 

 
21 / ! private  ＼ϱ~
	 ʷ ϴ!   ϳ ˷帮.. 
	(Ͻö Ͻö~~~ --;;;;;) 
	
	oop Ŭ ĸ̼(ĸȭ  ô..  ۸..) 
	 ߿  . ü Ӵܰ迡 ü ܺο Ǿ 
	ȵ  private  ϰ ϴµ.. ̷   
	 ణ̶ ߸ Ǿ private  ＼ؾ ʿ䰡  
	 Ȳ.  ǹڿ ־,  ʿ Լ? 
	ֱ ѵ װ private.. ~ Դϴ. 
	
	̷ 쿡..  ش Ŭ ٽ ӹ鼭 ۺ ϰ 
	ϴµ.. ׷ ϴ  ＼  ְԵ.   
	.. ٽ ӹ Ŭ, ̽Ŭ ۳Ʈ (۳Ʈ 
	ȷƮ ), ۳Ʈ  ƾ   Ÿӿ 
	  .  Ÿ ¸... .. Ȳݾƿ. û մϴ. 
	
	߻ȭ.. ĸ̼.. .. ̵.. ̷  .. oop.. 
	.. ʸ  ǹ α׷ӿ ̵  ҿԴϱ.. 
	 ð  Ƹ.. 
	
	׷... private  ＼ϴ  մϴ.. 
	  ̿  ȵǰ, ¸~!  .. 
	(̿ ȵǴ  Ʒ  ø ƽð ɰ̴ϴ.) 
	Ȯ ϸ..     ̱ , C++  
	׶  .. ǹڿ ~ ^^ 
	
	..  մϴ. 
	ҽ , Ȥ ҽ ϱ  Ŭ ִ  
	(̸.lib, .obj, Ȥ .bpl)  ȭ 
	̸.h(Ȥ hpp) ,  Ŭ  
	ۺ ̺ Ƽ Ƽ ۺõ 
	! ȭ(̸.h) մϴ. ϵ  obj, lib, bpl 
	 ̷  ü  ʽϴ. 
	
	ġ    ̴ϴ. ½ϴ. 
	̺̳ Ƽ带 ۺ̳ ۺõ  ٲٷ? 
	ȭϸ ָ ˴ϴ. ȭϿ ۺ̳ ۺõ   
	 public: ̳ __published:  Űܹ  Դϴ. 
	ٸ ⿡ ȣҶ ȭϸ ϱ ,  ̺  
	ۺ ֵ˴ϴ. ƴ, δ  ۺ  Ǿ. 
	
	  Ἥ.. 峭 ĺô. 
	 vcl TCustomGrid  ޼ҵ , κ ܺο  
	  protected Ǿֽϴ. ? 
	ǥ, TDBGrid DeleteRow()  ұϰ ＼  ϴ. 
	?  ̽Ŭ TCustomGrid  Լ protected Ǿ ֱ 
	. ? 
	(ȵȴٴ° ȹϱ   غ. "¼ ¼ not accessible" 
	 ޽  ɰ̴ϴ.) 
	
	׷  սô. 
	 include/vcl 丮 ִ grids.hppȭ , TCustomGridŬ κ ô. protected:  û  Լ ߿ 
	DeleteRow() DeleteCol()  ߰Ͻ  ̴ϴ. 
	 θ  Ʒ ִ public:  ~¦~ Űܺô. 
	      ȭ(grids.hpp) 
	ٸ ̸  س߰? 
	׸ TCustomGrid ӹ޴ Ŭ(? ׸, Ʈ׸ ) 
	 DeleteGrid() ȣغô.  ? 
	
	  Ȱ뵵 ûϴ. ѵΰ   Ҽ ִ  ƴմϴ. 
	 ߸ ϸ û Ȳ  Ҽ ְ, ߸ ϸ 
	 α׷ֿ    û ϵ   . 
	
	oop   Ŵϱ   Ŷ󱸿? . 
	..  ʸ  ǹ α׷ ׷ ϸ鼭 
	" ˱ ƴµ oop  ű  ˷ټ "  غ. 
	 ħ Ź Ⱦ ü Ǹ̴ϴ. (^^;;;;;) 
	
	 ̶ ߸  ̶ ?  쵵 Դϴ. 
	 ؿ ؼ Ծ Ұ̴ϴ.

 
22  /  ! ȭ ÷ ˾Ƴ
	ȭ ػ󵵴 TScreen   Screen üκ ˾Ƴ 
	ֽϴ.  Screen->Width, Screen->Height ϸ ȭ ,  
	ȼ ˾Ƴ  . 
	
	, ȭ ÷ ̷   .. 
	apiԼ GetDeviceCaps()  ̿ؼ ˾Ƴ մϴ. 
	 Լ ش ġ     ˾Ƴ  ִ   
	Լ. ù° ڷ DC, ׸ ι° ڷ ˾Ƴ   
	شϴ ũθ Ѱָ ˴ϴ. (ڼ  win32 reference ..) 
	
	 ϴ.. ȭ     ϸ   ֽϴ. 
	GetDeviceCaps(Canvas->Handle,BITSPIXEL) * GetDeviceCaps(Canvas->Handle,PLANES) 
	̷ ϸ  ȼ Ʈ .   256÷,  ȼ 
	8Ʈ ˴ϴ. ׷, ÷? 
	
	մϴ. , ̷ž..  Ʈ ô.     
	BitPerPixel ̶  ޾Ҵٸ, 1 << BitPerPixel  ϸ ÷ ˴ϴ. 
	(ذ ȵǽô ..  Ʈڸ ٽ Ͻñ..) 
	
	DCμ Canvas->Handle Ѱ , TCanvas  DC ĸ̼ 
	ϰ ִ ü̱ Դϴ. ׷ Canvas ڵ DC ˴ϴ. 
	
	GetDeviceCaps() Լ ̿ϸ  ܿ پ ̽    
	ִµ, Ѱ   ڸ,  / dpi  Լ ̿ؼ 
	˾Ƴ  ֽϴ.  õ  DC Printer()->Handleκ 
	  ְ,   ,  dpi   Ҽ ֽϴ. 
	
	GetDeviceCaps(Printer()->Handle, LOGPIXELSX)   //  dpi 
	GetDeviceCaps(Printer()->Handle, LOGPIXELSY)   //  dpi 
	
	ô ? ^^ 
	ͷ  ׸ ׸, ȭ  ũ ϰ  
	ݵ Ͱ  dpi ȭ dpi(Ϲ 96)    
	˾Ƽ ׸ŭ  ־ մϴ. 
	
	׷ ǽñ... 

 
23  /  ! common dialog Ʈ ߰ϱ~!
	 98 Ẹ   ˰,  98 ε ̾α׿  
	 ´̾αε ұϰ ̻ ư(øȭϿ ) 
	.. ̰  ÷.. ϰ ñϼ̴  ø ˴ϴ.. 
	ٷ, ̰  Ӵ.. ? ^^;;;; 
	
	  ,  vcl ҽ °̴ϴ. (example ƴ϶ vcl) 
	ĸ, ٷ TOpenPictureDialog ٷ ´̾α׿ óڽ 
	߰Ѱݾƿ~ ׷ װ  غ.. ð  , 
	ᱹ س½~~~ īּ~ ^^;;;; 
	
	 ڱ ̷ غô? .. 
	  öԴ.  غ ͱ⵵ ߰.. 
	׷ ٷ غýϴ. ª ð غ  ۳Ʈ  ϰ, 
	׳ ´̾α׿  Ʈ ø, ¿  ´̾α 
	̺̳ Ƽ  ＼ؾ߸ ϴ.    ˷? 
	
	,  ̷   ԰, ׳ vclҽ ˾Ƽ ض.. 
	 ˷. ׸ , ۳Ʈ  ʰ   ִ  
	   Ȱְ.. ( ġѰ....? T.T) 
	
	ھ.. ׷  ô. 
	  ´̾α ۳Ʈ ϳ ߰? 
	׷Ŀ,  OnCreate ڵ鷯 ÷ Ʈѷμ г ϳ ô. 
	, Ÿӿ  г̶  , ׷  ȳϱ 
	 ô.  ⼭ Դ Panel TPanel *  
	Ȥ Ŭ 𳻿  س. 
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	    Panel = new TPanel(OpenDialog1); 
	    Panel->SetBounds(204, 5, 169, 200); 
	    Panel->BevelOuter = bvNone; 
	    Panel->Caption = "~~~"; 
	} 
	оƮ ? .. ⼭ ൵  ϴٸ.. 
	Ѿô.   ߿մϴ.   ڿ ǥð 
	 մϴ. ˰?? 
	
	
	 
	׸..  ´̾α׸  ̺Ʈ  ư ϳ ô. 
	ڵ ׳ ´̾α->ͽťƮ();  ƴϰ, ణ  ߰˴ϴ. 
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    OpenDialog1->Template = "DLGTEMPLATE"; 
	    OpenDialog1->Execute(); 
	} 
	   ƴ? ^^ 
	
	׷,  ´̾α׸ Ŭϰ Ʈν ̺Ʈ ǿ 
	OnShow ̺Ʈ Ŭؼ ڵ鷯ڵ带 ,   Ếô. 
	void __fastcall TForm1::OpenDialog1Show(TObject *Sender) 
	{ 
	    TRect PreviewRect, StaticRect; 
	    ::GetClientRect(OpenDialog1->Handle, (RECT *)(&PreviewRect)); 
	    StaticRect = OpenDialog1->GetStaticRect(); 
	    PreviewRect.Left = StaticRect.Left + (StaticRect.Right - StaticRect.Left); 
	    Panel->BoundsRect = PreviewRect; 
	    Panel->ParentWindow = OpenDialog1->Handle; 
	} 
	
	ھ..  غ ϴ. 
	ϸ, տ ߵ ΰ  ＼ ٴ  ϴ. 
	̷    ô.  ذ ȵǽô   
	о. 
	
	׷..  ? ´̾α׹ڽ ʿ  ڸ 
	ŰἭ  . ? 
	
	  ҽ ۼϸ鼭 ɵǴ°  м߽ϴٸ, ᵵ .. 
	  ö ϱ սô.   ð  ϴ.. ~ 
	
	׷ ǽñ...

 
24  /  ! Ư  Ž 
	 , Ư  Ž⸦  Դϴ. 
	 ~ . ϴ ~ 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    ShellExecute(0, "explore", "C:\\WINDOWS", NULL, NULL, SW_SHOWNORMAL); 
	} 
	
	ƴ...  ShellExecute() Լ Դٴ! 
	̳ ShellExecute() Լ   ? ^^ 
	ڷμ "explore" Ѱִ  ٽԴϴ. 
	  Լ Ծ <ShellApi.h> Ŭ ִ°  ȵǱ. 
	׷.. õ, ǽñ ٶ鼭, ̸...


 
25  /  ! Ȯ ϱ
	 .. ڽ α׷  Ȯڸ Ʈ ϱԴϴ. 
	
	̵ ̴ϴ.   Ʈ ϴ Դϴ. 
	HKEY_CLASSES_ROOT  Ȯ  α׷ ϵǾִµ, ٰ 
	ڽ Ȯڸ ְ, 
	 Ʒ shell\open\command   α׷  . 
	ҽ Ǳ? 
	
	#include <registry.hpp> 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    TRegistry *reg = new TRegistry; 
	    reg->RootKey = HKEY_CLASSES_ROOT; 
	    reg->LazyWrite = false; 
	    // Add Program Support 
	    reg->OpenKey(".imp\\shell\\open\\command", true); 
	    // Invoke the program passing the file name as the first parameter 
	    reg->WriteString("", "C:\\Windows\\notepad.exe %1"); 
	    // Add Icon Display 
	    reg->CloseKey(); 
	    reg->OpenKey(".bor\\DefaultIcon", true); 
	    // Use the first icon in the executable to display 
	    reg->WriteString("", "C:\\Windows\\notepad.exe, 0"); 
	    reg->CloseKey(); 
	    delete reg; 
	} 
	
	? 
	̷ ϸ Ȯ .imp  ȭ Ŭϸ ޸ ˴ϴ. 
	 شȮڸ  ȭ Ϸ õ    
	ϰ,  Ȯڸ  ȭϿ Ÿ  Ѱ. 
	
	ٵ.. ... 
	̷ ƹ    ݾƿ? ׷... 
	ణ ÷ ĸ... ^^ 
	
	Ϻ α׷ , Ư Ȯڰ ƴ϶ Ȯڿ   Ž 
	ؽƮ޴ Ͻѳ ? ǥ WinZip  ֱ,  
	ܿ  α׷ ڱ α׷ ؽƮ޴ ׻ س . 
	̰  .. ϰ ãƺôµ, Ѱ  ˾Ƴ½ϴ. 
	Ͱ HKEY_CLASSES_ROOT Ʒ Ȯ ̸ ƴ "*" ̶ Ű  
	 Ʒ     α׷ ִ°̴ϴ. 
	ٽ , ؽƮ޴   "c:\\.exe" ׻ س 
	ʹٸ, 
	reg->OpenKey("*\\shell\\open\\command", true); 
	ϰ, 
	reg->WriteString("", "C:\\.exe %1"); 
	 ϸ ȴٴ°.  Ǵ. 
	
	ٵ.. WinZip ÿ ٸ  .. *׸ WinZip  
	ʽϴ. .. 
	 ãƺ ˰ԵǸ ˷帮 . 
	
	׷.. õ, ε ǽñ ٶ鼭, ̸... 

 
26  /  ! Ʈ  Ʈ
	Ʈ  ִ Ʈ. 
	   ִ  Ư , ʹ ϰ ٺ 
	  𸣰 ׳   ɸ  ˴ϴ. 
	
	 ȿ   𸣴 û ִ Ư .. 
	  Ʈ õ 븸 ٷﺾô. 
	(Ʈ ,  ƽð? Ž ϸƮ â õ  
	ٽ Ŭϰų Ȥ F2Ű  Ʈ ° Ǵ° .) 
	
	 ÿ õ ͵   ؾ Ұ Ʈ ReadOnlyӼ 
	Դϴ.  ReadOnly Ӽ true ָ ƿ  Ұϰ ˴ϴ. 
	Ŭص Ʈ  . Ʈ falseμ, Ʈ   
	Դϴ. 
	״ ؾ Ұ ̺Ʈ ΰԴϴ. 
	OnEditing Ʈ ϱ   ̺Ʈ.  ̺Ʈ ڵ鷯 
	 Ʈ  (AllowEdit Ķ), ׸  Ʈ 
	    ֽϴ. 
	OnEdited ̺Ʈ Ʈ  Ŀ  ̺ƮԴϴ. ⼭ Ʈ 
	ڿ ˾Ƴ  ֽϴ. 
	
	 ..   Ʈ Win32 common Ʈε, vcl TListView 
	 Ʈ Ʈ   ϰ س, ٸ Ʈѵ  
	   س . ̹  ɵ ׷ϴ. 
	
	vcl TListView Ʈѿ ڵ Ʈ ϰ   ִ  . 
	, Ž⿡ F2Ű   Ʈ µ, vcl 
	ε Ʈ信  ϴ. ׷.. Ʈϰ ִ ޽ ãƾ 
	մϴ. 
	
	Ʈ  Ʈ  ִ ޽ LVM_EDITLABELԴϴ. 
	ڵ 帮... 
	
	SendMessage(ListView1->Handle, LVM_EDITLABEL, ListView1->ItemFocused->Index, 0); 
	
	̷ ָ ˴ϴ. F2Ű óϷ, ListView OnKeyDown ڵ鷯 
	̷ ڵָ ǰ? 
	
	Ʈ  ð ؼ  ˸ õϹԴϴ. 
	, Ʈ 쵵 ̿  մϴ. ޽ ̸  
	TVM_EDITLABEL . 
	
	  öų, Ȥ ȸ  Ʈ ٸ ִ  
	Ư ؼ ˾ƺ ϱ.  ⼭ Ĩϴ. 
	
	׷ ε ǽñ ٶϴ...

 
27 / ! ޽ ѱ ѱ 
	 .. ѱ ѱڸ ޽ Դϴ. 
	
	,   WM_CHAR ޽  ѱ  ϴ. ȭ鿡  
	. ,  ޸۳Ʈ ѱ  ''ڸ ´ٸ, 
	 ڴ   ȵ  ְ, ޵Ǿ 
	 αڷ νĵǾ '' ߰ Ŀ ϴ. Ŀ   
	ƴ϶ ⼭ ͸ ġ ڰ ϴ! ̷ ȵǰ? 
	
	̷ WM_CHAR ƴ  ޽ 2Ʈ  WM_IME_CHAR  
	մϴ.  WM_IME_CHAR ޽ ѱ ѱڸ 2Ʈ ⶧ WM_CHARó 
	 Ʈ ׳ WPARAM  Ǵ° ƴ϶ ѱ ѱڿ شϴ 
	2Ʈ Ѳ Ѱ մϴ. WPARAM unsigned int̴ 翬 2Ʈ 
	ѹ濡   ְ?  Ʈ ؼ  Ʈ ٿ մϴ. 
	 ô. 
	
	SendMessage(RichEdit1->Handle, WM_IME_CHAR, 
	    (WORD)((unsigned char)pString[i])<<8 : ((unsigned char)pString[i+1]), 1); 
	
	̰   Ʈ  ҽ ϺκԴϴ. pString ѱ ڿ 
	char *(ȽýƮ ƴ) ֽϴ. ̷ 2Ʈ ޽  
	. 
	
	׷, ǽñ ٶ鼭, ̸..

	 
28 / !   Ű
	ϴ..   ڴ ٶ  غ ߽ϴ. 
	׷.. ´   Ű  ڽϴ. 
	
	F12  ̳/ֿ͸ ϴ    ƽ? ̿ ϰ 
	Ʈ+F12  ֵ Ʈ  ⼭ Ʈ    
	ֽϴ.  Ʈ+F12  Ʈ ݴϴ.  ̻ 
	ū Ʈ Ҷ ְ  ãµ   Դϴ. 
	
	Ǵٸ  δ.. F11ϸ Ʈ νͰ Ÿϴ. 
	 Ʈ+Ʈ+F11  ġ Ʈ Ŵ . Ʈ+Ʈ+F11 ϸ 
	Ʈ ɼ Ÿϴ. ׳ Ʈ+F11 ϸ Add to Project . 
	
	״ Ϳ 밡 Ű ˾ƺô. 
	ͺ  ؿԴ Ű߿,  ġ ߴٰ ѹ 
	ϴ  ֽϴ. Ϳ Ư ġ Ϸ, Ʈ+K  
	״ Ű ϳ  ˴ϴ. ׷   ȸκп  
	簢 ѷ  ǥð ϳ Ÿϴ. ׷ Ŀ  ٸ 
	ġ  ִٰ Ʈ+Ű(տ  )  ѹ  ġ 
	մϴ. (Ʈ+Q ϰ ڸ  ˴ϴ.) ̷  ȭϸ 
	 10  ġ Ҵ  ֽϴ. 
	
	׸    𸣴  ,    ֽϴ. 
	  Ϳ Ʈ+Ű  ϸ ι  
	 ?  Ʒ ѱó η(簢 )  
	ϴ  ֽϴ. ̰ Ʈ+Ʈ+Ű մϴ. ķδ  
	ηθ  Ǵµ, Ϸ 콺 巡ؼ Ϲ  ѹ 
	ָ ˴ϴ. 
	
	׿ܿ.. Ű ƴ    Ұغڽϴ. 
	   ʿ Ÿ ٿ 콺 Ű  ˾޴ 
	Ƽ ׸ ֽϴ. ̰ Ŭϸ   Ǯٿ޴ ۵ Ʈ 
	 ɴϴ. ⼭   ư  ڰ  ´ ٹ 
	 ֽϴ. ( ۳Ʈ ȷƮ  Ű   Ƽ 
	׸ Ŭϸ ϰ ۳Ʈ ȷƮ Ŀ͸ Ҽ ֽϴ.) 
	
	  ʽϴٸ,  ؽƮ · ϴ    
	 ֽϴ.   ȭϿ  ų, Ȥ ߸  
	ҷ϶. ǥ ,   ҷ鿴µ  TCSpinEdit 
	̸ ٸ TSpinEdit ۳Ʈ  Դϴ. ׳  ҷ̸ 
	޽ ϳ   '˼  ۳Ʈ TSpinEdit'   
	ϴ. ׷ ȵǰ? ̷    ĸǵ  convert.exe 
	Դϴ. convert [̸].dfm ϸ  ȭ ؽƮ· ȯݴϴ.  ؽ 
	Ʈ ȭϿ ؼ Ϻθ  , ٽ convert [̸].txt ָ ٽ 
	 ٲپݴϴ. ( /  ȭ dfm ȭ̱ մϴٸ 
	 ؽƮȭϿ  ܼ  Ǿֽϴ.) 
	
	͸  Ͻʴϱ?  ͸   Ȱϰ ֽϴ. 
	 Ʈ  ͸ ־θ,  ׿ Ȱ  Ʈ 
	   մϴ. ׳ New Ҷ   ̾α׹ڽ ҷ 
	 ص״ Ʈ ״ ɴϴ.  ׳ ȥ   ݹ 
	  ֽϴ. 
	
	̿ ϰ,  ϳ ͸ ־ٰ ҷ  ֽϴ. ̳ 
	  Ű   ޴ Add to Repository  ϸ ̾α׹ڽ 
	 ϳ ߰, ⼭ ̸ ͸ Ÿ   ָ, 
	   鶧 밡ٷ  ʰ ͸ ׳ ҷ  
	ֽϴ.  쿣,   ϴ  ٿ ڽԴϴ.   
	α׷Ӹ ٿ ڽ ְ ٸ缭   ״ ? 
	  ٿ ڽ ֽϴ.  ٿ ڽ ͸ ־ٰ 
	ο  ϳ 鶧 ҷ մϴ. ٿ ڽ ܿ, ڵ  
	ϳ ־׽ϴ. ڵ  ϴ  ƴ, ѹ   
	 鿩 ϴϱ. 
	
	̷ ܿ,    ϴ.     ִ  
	Inside Secrets of Delphi 3 Developer's handbook ,  ȯ Ŀ͸ 
	ϴ  Դϴ. ̷ 鿡   е  å 
	纸  մϴ. 
	
	Ӹ ´ ŷýϴ.   ϴ ɵ   
	ִµ, ƽôٽ Ű Ư ̶ Ӹ ϴ° ƴ϶ տ  
	ϴ Ŷ,  鼭 ʿҶ ׳  ˾Ƽ ,  ۷ 
	غ   ȶ 찡 ŵ. 
	׷,  Ǵ    Ѱ ׿. 
	
	ǽñ ٶ鼭, ̸...

	 
29  /  ! ȯ Ŭ ϱ
	 C++ ϰ ־,  C ؿ ȭ ߽ 
	  ״  ֽϴ.   ȭ̶  ̵Ƽ̾ 
	 и ְ ڵ θ и ༭  鵵 ֽϴٸ 
	翡 ͼ  ̺ û   ϳ ǰ . 
	 ̷  ּȭϱ  ϵ  Ư  
	ϰ .  ѹ ϵ  ִ Ȱϴ  
	˾ƺ ϱ.  ȭ ٸ 鿡 ؼ ˾ƺô. 
	
	 (ǻ )   ι Ŭϸ? 
	 𿡼  ű,      ֽϴ. 
	Cڵ ̷  ϱ      . 
	 ȭ ̸ QQQ.H , 
	
	#ifndef QQQH (Ȥ QQQ_H) 
	#define QQQH (    "     ) 
	
	.....(  ) 
	
	#endif 
	
	̷ ؼ  ȭ ι Ŭ Ǵ  ϴ. 
	 ̷ ʿϳı? ֳϸ,  ȭǴ Ʈ 
	  ٸ  Ŭϰ, ٽ   ٸ  Ŭ 
	ϰ.. ̷    ؼ  ȭ ٽ ŬǴ 찡 
	 ֱ .    ,  ̹ QQQ.H Ŭ 
	Ǿٸ QQQH ̸ Ǿ  ŬϷ Ҷ ׳ ŵ 
	 Ǵ°.      Ʈ ̷ ˻κ  
	Ǿֽϴ.   ƴ϶   Ϸ ǥ (  
	stdio.h alloc  ǥ  ) ̷ ˻ μ ԵǾ 
	ֽϴ. 
	
	,  Ϻغ̴ ̷ ̿  ұϰ, ̷  
	ġ  ϳ ֽϴ.   츦 غô. 
	
	MyClass  Ŭ,  Ŭ  Ǵ ٸ Ŭ MyMeberClass 
	غô. MyClass MyMemberŬ  ؾ ϹǷ 翬 
	MyMemberClass  ؾ ǰ? ݴ MyMemberClass 
	MyClass ؾ Ѵٸ? ׷ ƹ  Ŭ մϴ. 
	
	⼭  ϴ. MyClass.h MyMemberClass.h  ȣ Ŭϰ 
	ֽϴ. ׷ ,   MyClass.h Ͽٸ, ̹ 
	MyMemberClass   ϰ Ȱ̴ϴ. ٽ MyMemberClass.h 
	Ϸ Ҷ ( ̹Ƿ ٽ ϰ ) 
	MyMemberClass.h Ŭ  ʽϴ!     undefined 
	 ̴ϴ.  Ŭ ϳı? ٷ  #ifndef ~ #endif 
	 . ذ  ȵǽô  ٽѹ  оñ ٶϴ. 
	
	̷  ذå?? 
	, ٸ Ŭ  Ҷ  Ŭ ߻(ܾ 
	 𸣰ڴµ) ϴ ̴ϴ.    츦 ü 
	... 
	
	----------------------------- MyClass.h ------------------------------- 
	
	#include <MyClass.h> 
	
	class MyClass 
	{ 
	(¼ ¼) 
	
	    MyMemberClass *A_Member; 
	... 
	}; 
	
	
	-------------------------- MyMemberClass.h ---------------------------- 
	
	#include <MyMemberClass.h> 
	
	class MyMemberClass 
	{ 
	... 
	    MyClass *OwnerObject; 
	... 
	}; 
	
	̷ Ǿ ȵȴٴ . ̰  ϵ ġ, 
	
	----------------------------- MyClass.h ------------------------------- 
	
	class MyClass 
	{ 
	(¼ ¼) 
	
	    class MyMemberClass *A_Member; 
	... 
	}; 
	
	
	-------------------------- MyMemberClass.h ---------------------------- 
	class MyMemberClass 
	{ 
	... 
	   class MyClass *OwnerObject; 
	
	... 
	}; 
	
	̷ Ǿ մϴ. (𿡵 ٸ   Ŭ Ѱ ٴ 
	Ϳ ϼ.)  쿡  Ѱ  Ǵ ִµ.. 
	Ŭ    ʰ ׳ '̰ Ŭٸ ˾ƶ'  
	 ߱ ,  Ŭ  ϴ  ٵ (~.cpp) 
	  undefined  ϴ. 
	׷ ٵ ⿡  Ŭ Ŭ  մϴ. 
	
	  򰥸? ̷ 츦  غ  е  ذ 
	ȵɰ̴ϴ. ׳ ̷  ִ..  سð,  
	   ־ܰ͸ صθ   Ʈ ۼϴٰ 
	  Ͻø ǰڽϴ.  ذ ȵǽô   
	Ϸ Ͻ ʿ䰡  . 
	
	  ..  C/C++ å  ޵  ð.. ǹ 
	ũ̶ Ҹ κεٰ,  ڸ å ᵵ μ  
	Ҵؾ   ذ  κԴϴ.  ʿϽŵ ذ  
	ȵǽô  ٽ  ÷ֽø 亯ϵ . 
	
	׷,  ˽޽ϳ, õ ǽñ ٶ鼭, ̸... 
	
	 
30  /  !  ˾Ƴ 
	 , Ϳ Ǿִ   ˾Ƴ Ųٷ ϱԴϴ. 
	   κ  ҽ    
	 faq Ͽ  ڵ ٲ ̴ϴ. 
	
	׷,    ˾Ƴ Լ... 
	
	int __fastcall GetPaperSize(void) 
	{ 
	    char Device[256], Driver[256], Port[256]; 
	    THandle hDMode; 
	    TDevMode *ADevMode; 
	    Printer()->GetPrinter(Device, Driver, Port, hDMode); 
	    ADevMode = (TDevMode *)GlobalLock((void *)hDMode); 
	    GlobalUnlock((void *)hDMode); 
	    return ADevMode->dmPaperSize; 
	} 
	
	⼭ ϵǴ  wingdi.h  Ǿ ִ ũ Դϴ. 
	    DMPAPER_LETTER, A4 DMPAPER_A4, ̷ . 
	ڼ ˾ƺ÷ wingdi.h  Ͻñ ٶϴ.    
	 , ϰ ǰ̴ϴ. (  60~70 ˴ϴ.) 
	
	ݴ     ϴ Լ... 
	
	void __fastcall SetPaperSize(int pSize) 
	{ 
	    char Device[256], Driver[256], Port[256]; 
	    THandle hDMode; 
	
	    TDevMode *ADevMode; 
	    Printer()->GetPrinter(Device, Driver, Port, hDMode); 
	    ADevMode = (TDevMode *)GlobalLock((void *)hDMode); 
	    ADevMode->dmPaperSize = pSize; 
	    GlobalUnlock((void *)hDMode); 
	    Printer()->SetPrinter(Device, Driver, Port, hDMode); 
	} 
	
	 ..   ˾Ƴ Լ  ? 
	 Լ鿡 ΰ̶   ִ TPrinter::GetPrinter(), 
	TPrinter::SetPrinter(), ׸ TDevMode(̰ api DEVMODE ü typedef 
	ѰͿ Ұմϴ)  ̷  ÿ   ܿ   
	 ֽϴ. TPrinter::PaperWidth TPrinter::PaperHeightε ˾Ƴ  
	ִ   , ׸  ̹ , ̹ ̸, 
	 Ÿ ,  ̹  ִ κ   ΰ 
	Լ ü ˾Ƴ  ֽϴ. 
	  е ѹ ڼ ˾ƺñ. 
	
	׷, ǽñ ٶ鼭, ̸..

 
31  /  !  гο ֱ~!
	 , гο(Ȥ ٸ Ʈѿ)  ֱ Դϴ. 
	  ٽ մϴ.  TControl ڼ̱ , Ʈѿ 
	  ֽϴ. ,      ŷմϴ. 
	ϴ.. ڵ带 ۼغô. 
	
	Form1 Form2, ΰ   Ʈ ϳ ۼսô. 
	׸ Form1 г ϳ ϴ. ũ  ŭϰ..  alClient 
	 ڳ׿. , ư ϳ  ϴϱ ణ   սô. 
	׸ ư ϳ .. OnClick ڵ鷯 ۼսô. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    Form2 = new TForm2 (Panel1); 
	    Form2->Parent = Panel1; 
	    Form2->Left = 0; 
	    Form2->Top = 0; 
	    Form2->Visible = true; 
	} 
	
	翬 Form2 Ʈ ɼǿ Available Űܳ߰?  ϴϱ. 
	׸.. Form2 OnClose ڵ鷯 ۼսô. ~ 
	
	void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) 
	{ 
	    Action = caFree; 
	} 
	
	 ϴϱ,  ڵ  ֵ ϴ°. 
	
	ھ.. ̰ɷ Դϴ. ? غ. 
	 г ȿ ϴ.  MDIó.  MDI ƴ. 
	
	.. ֱ ѵ ̰  ҿ ֳı? ҿ ~! 
	 BorderStyle bsNone ´ٰ غô. 
	׷... dfm ۼ , ġ ο Ʈΰó   ~ 
	гο , Ʈ ǽƮ   ְ? 
	׷ ǽƮ ̳ʷ ̸ ε Ʈѵ ÷  ִ°. 
	   ǰ? ^^ 

	 
32  /  ! Stay on top
	ϴ.. 
	..   ڼ..   غ ð ׿.. ¬~ 
	׷..  Assist ΰ 鶧 Ծ   ϳ ˷帮. 
	ٷ, Stay on top Դϴ. 
	
	츦 stay on top , Ϲ ƽôٽ  Ÿ 
	fsStayOnTop ൵ ˴ϴ. ...     Ӽ 
	  ٽ ֱ   ٰ Ÿ,   
	Žϴ. 
	
	׷.. ȱ̰ ǵ غô. ,   ƴմϴٸ... 
	SetWindowPos() api Լ ϸ ˴ϴ.  Լ, ַ   
	ġ ̵ ϴ 뵵  ˴ϴٸ, ش  z-order  
	µ ˴ϴ. ׸ ٷ  z-order  stay on top  õǾ 
	ֽϴ. 
	
	  ġ..   ϸ Ǵ ˾ƺô. 
	
	SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE:SWP_NOSIZE); 
	
	?   ϸ 찡   ״ stay on top 
	ٲϴ. ƹ ȭ  ȹϱ  ְڽϴٸ, ٸ 츦 
	Ŭؼ Ȱȭѵ    ö  Ȯ  ֽϴ. 
	
	 Assist ΰ 鶧, ش ư(Top ư) Check· س 
	 OnClick ̺Ʈ ڵ鷯   ڵ带 ־ϴ. 
	
	void __fastcall TMainForm::TopToolButtonClick(TObject *Sender) 
	{ 
	   SetWindowPos(Handle, TopToolButton->Down ? HWND_TOPMOST : HWND_NOTOPMOST, 
	      0, 0, 0, 0, SWP_NOMOVE:SWP_NOSIZE); 
	} 
	
	?  ٷ stay on top    ̻ Ű Ƚᵵ ˴ϴ. 
	
	׷, ǽñ ٶ鼭, ̸... 

 
33  /  ! ĸǵ  ޾ƿ
	   ޾ƿ Դϴ. 
	 ø̼ǿ ø̼   ٸ ȭ  
	 ó   ڸ ؼ ϹǷ, 巡   ó 
	ַ ݵ  ڸ ó մϴ. 
	
	   vcl Լ ParamCount()  
	˾Ƴ  ֱ,    vcl Լ ParamStr() ˾Ƴ  ֽϴ. 
	ϴ   ô. 
	
	   ޸ Ʈ ϳ ,   ڵ带 ô. 
	
	void __fastcall TForm1::FormShow(TObject *Sender) 
	{ 
	    for(int i=0; i<=ParamCount(); i++) 
	        Memo1->Lines->Add(ParamStr(i)); 
	} 
	
	̷ ϸ   ڰ ޸   ϴ. 
	
	 ... for (<)   ƴ϶, ų (<=) 
	ȴٴ ̴ϴ. 
	ParamCount() Լ α׷ ü н Ѱ ParamStr(0)   
	 ʴµ ParamStr()  ϱ . 
	
	  ſ? ,   ϸ ߿ Ȳ  
	Ҽ ִ ̶ϴ. 
	׷, ǽñ...
 
34  /  ! ѿ ó
	 , ø̼ ؿ ѿó ϴµ õ  
	ڵԴϴ. 
	
	..  ѿ ¿ ڵ ѿ ȯϴ  ˾ƺô. 
	 ѿ¸ ˾Ƴ Լ ҽ... 
	
	bool __fastcall TForm1::GetHanMode(void) 
	{ 
	    unsigned long Conversion, Sentence; 
	    HIMC Mode = ImmGetContext(Application->Handle); 
	    ImmGetConversionStatus(Mode, &Conversion, &Sentence); 
	    return (Conversion == IME_CMODE_HANGEUL); 
	} 
	
	̷ ϸ ˴ϴ. ̿ ϰ, ѿ¸ Ϸ, 
	
	void __fastcall TForm1::ToggleHanMode(void) 
	{ 
	    unsigned long Conversion, Sentence; 
	    HIMC Mode = ImmGetContext(Application->Handle); 
	    ImmGetConversionStatus(Mode, &Conversion, &Sentence); 
	    if (Conversion == IME_CMODE_HANGEUL) 
	        ImmSetConversionStatus(Mode, IME_CMODE_ALPHANUMERIC, IME_CMODE_ALPHANUME 
	RIC); 
	    else 
	        ImmSetConversionStatus(Mode, IME_CMODE_HANGEUL, IME_CMODE_HANGEUL); 
	} 
	
	 ? ^^ 
	
	ھ..  ܰ Ѿô. 
	Ϲ ڴ ѿȯŰ Ʈ+̽ Ű ô ͼ. ׷  Ű 
	 ߰ڴµ..  Ű  ٽ μ Ʈ  
	Ű ϰ ִ  ֽϴٸ, ø̼ǿ ý ü  
	 մٴ   ׷? ׷  Ʈ+̽ Ű óָ ǰ 
	µ... ̰ Ӹ ƴ϶, ¹ٿ ѿ ¸ ǥָ  ? 
	
	׷,    ֵ, Ű ԷƮ(  Ʈ ޸ ) 
	 OnKeydown óϷ  ϴٺ, ø̼   Ʈ 
	Ʈ  ,  OnKeyDown ڵ鷯  ۼ ϴ ϱ ¦ 
	 ڵ ǰ?   ڵ鷯   ó ʿ  
	Ʈ Ʈѿ   ִٸ  پڽϴٸ,    
	  å . 
	
	̷ , ø̼ ؿ WM_KEYDOWN ޽  ˻Ͽ ó 
	ִ  ? ̷ ַ, TApplication  ̺Ʈ OnMessage  ̿ 
	ϸ ˴ϴ.   þ .. ҽ ô. 
	
	void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled) 
	{ 
	    static bool ShiftPressed = false; 
	
	    switch (Msg.message) 
	    { 
	        case WM_KEYDOWN: 
	        switch(Msg.wParam) 
	        { 
	            case VK_SHIFT: 
	            ShiftPressed = true; 
	            return; 
	
	            case VK_SPACE: 
	            if(!ShiftPressed) 
	                return; 
	            ToggleHanMode(); 
	            ShowHanEngStatus(); 
	            Handled = true; 
	            return; 
	
	#define VK_HANENG 21 
	            case VK_HANENG: 
	            ShowHanEngStatus(); 
	            return; 
	        } 
	        break; 
	
	        case WM_KEYUP: 
	        if(Msg.wParam == VK_SHIFT) 
	            ShiftPressed = false; 
	    } 
	} 
	
	,  ڵ鷯  ø̼ OnMessage ϱ    
	ڵ尡  ʿ. 
	
	void __fastcall TForm1::FormShow(TObject *Sender) 
	{ 
	    Application->OnMessage = AppMessage; 
	    ShowHanEngStatus(); 
	} 
	
	, OnCreate ൵ ϴٸ  OnShow   ι°  
	¹ ±  Լ  ع Ѱ. 
	
	void __fastcall TForm1::ShowHanEngStatus(void) 
	{ 
	    AnsiString StatString = GetHanMode() ? "ѱ" : ""; 
	    StatusBar1->Panels->Items[1]->Text = StatString; 
	    Form2->StatusBar1->Panels->Items[1]->Text = StatString; 
	} 
	
	 , ø̼ǿ   ְ,    ¹ٿ ѿ¸ 
	ǥ  츦  Դϴ.  ¹ٰ ϳ ʿϴٸ  
	 ʿ. 
	
	 ؼ, ѿó    Դϴ.     
	 Ʈѿ ѿó  Ʈ+̽ Ű     
	ƴ϶, Ʈ+̽ Ű  ƴ϶ Ű ѿŰ  ¹ٿ 
	 ѿ° ǥõ˴ϴ. 
	
	 Ȱ ? غ  ˴ϴ.   ԰ ִ ڵ Ϻδϱ 
	. .. ⿡ Ѱ    ֽϴ. 
	 ѱ۸̰,  ¿ ѱ ̶,  ''Ű  
	̻¿ Ʈ+̽ Ű  ѿȯ ȵ˴ϴ. ϶ 
	WM_KEYDOWN ƴ WM_IME_~ 迭 ٸ ޽ ޵Ǵ  ϴٸ.. 
	ٻ ð  ãƺ ߾. T.T 
	㿡 ð ãƼ ϱ ϱ.. ε ⿣   
	. 
 
35  /  !  Ŀ 
	   ˷ ,   콺Ŀ ϴ 
	 ˾ƺô. ʺе ѹ  ٷ  غ  ֵ, 
	ܰ躰  غô.  ʹ  Ϲ ͸ ϸ 
	е ǸϽǱ..     ޾ƺڽϴ. 
	(ٺ  ...   ϴ.) 
	
	
	Win32ȯ濡 콺 Ŀ 
	 
	
	  ..  콺 Ŀ  Ϲ ׵ 
	ѹ  ¤ Ѿô. Ʒ ܶ api󿡼 Ŀ  ̹Ƿ 
	 ðų  ƽô  Ѿŵ ϴ. 
	
	  ȯ濡 Ŀ (win16̵ win32̵) HCURSOR ڵ 
	üԴϴ. api   Ϸ,   CreateCursor() Լ 
	Ͽ Ŀ AND ũ XOR ũ, ׸ ֽ(Ŀ ̹  
	Ŀ ġ νϰ  Ʈ)  ְ , Ϲ 
	HCURSOR ڵ SetCursor()Լ մϴ. Ŀ ڵ ϱ⺸ 
	ҽκ о̷ LoadCursor()Լ ϴµ, ⼭ Ѱִ 
	ڿ   Ʈ Ŀ оü ֽϴ. (νϽ ڵ 
	NULL Ѱָ鼭 ƮĿ ̸ Բ Ѱָ ˴ϴ.) 
	
	
	ҽμ 콺Ŀ 
	 
	
	̹.. Ŀ ٸ  캾ô. ⼭  , ҽμ 
	Ŀ Դϴ. ϰԸ 캸,   ðų 
	 ˰   Ѿż  ܶ ٷ ø ǰڳ׿. 
	
	Ŀ Ǵٸ ..  Ŀ̹ ҽ  ⺻ ܰ 
	  Ѵٴ Դϴ. (92̾ ׿) 
	  ͸ 鼭 õ  ȭϵ  м߾µ, 
	Ŀҽ  ܸҽ  ϸ,  °... 
	Ʈ ιƮ ̰   ±. 
	ܰ Ŀ ҽ   ۿ  ,  Ž⳪ 
	ȭ(̰͵ Ž)   巡Ҷ   
	ϰ ġ鼭 Ŀó Ǵ    غ  ذ 
	ǽ ̴ϴ. 
	 Ŀ Ʈδ 16x16    ⺻  
	32x32ʹ ̰ , ̰   ƴ϶ Ʈ ϵ 
	׳ Ʈ  Դϴ. ÷ ׸ ƺ  Ŀ ó 
	ȭ  32x32 ũ ̹ Ǵ   ̴ϴ. 32x32 ũ, Ȥ 
	48x46̳ 64x64 ũ Ŀ 󸶵   ֽϴ. 
	
	
	VCL Ŀ 
	 
	
	   ׳ Ŀ  Ϲ   þű.. 
	   Ŀ Ͽ ˾ƺô. vcl󿡼 Ŀ   ҰŴϱ   ø 
	Ѿŵ ϴ.  ˾Ƶνø 翬   ǰ. 
	  Ÿ ̴..   Ŀ ϴ  Ͻ  
	  ũؾ ڽϴ. ^^ 
	
	ƽôٽ...  ̿ ϴ vcl ̺귯 翬 api  
	(wrapping)  Դϴ. δ   ణ ڵ带 ļ api Լ 
	  ˴ϴ. Ŀ  κе鵵  . 
	Ʈѵ (۳Ʈ ƴ) vcl Ӵܰ迡 TControl ӹް, ȭ鿡 
	̴  Ʈѵ 翬  Ʈѿ Ÿ Ŀ   ־ 
	ϱ  Cursor Ƽ TControl  Դϴ. 
	 Cursor Ƽ vcl  Controls.hpp    Ǿ 
	ֽϴ. 
	
	__property TCursor Cursor = {read=FCursor, write=SetCursor, default=0}; 
	
	۳Ʈ µ  ðų Ȥ  ̶  غ 
	  ƽôٽ,    Cursor Ƽ ＼Ϸ 
	  ＼ Լ(Ȥ )  . ⼭, 
	Cursor Ƽ  Ҷ   FCursor , ׸ 
	 Ҷ ȣ Լ SetCursor() Լ ϰ ֽϴ. 
	
	 Լ SetCursor() Ǹ ã  ش  vcl ҽ controls.pas 
	ô. ͷ  'SetCursor' ڿ ãƳ ݹ 
	Լ ٵ ãƺ  ֽϴ. ҽ  ĽĮ ڵ ¥  
	ǰű..    ϸ, CM_CURSORCHANGED  vcl 
	 ޽ ü Ʈѿ  ڵ Ǿֽϴ. ׸ 翬 
	 ޽ ڵ鷯 ִµ.. (ڵ鷯  ޽ ǹ̰ ..) 
	ٽ  ڵ鷯 Լ ãƺ.. WM_SETCURSOR ޽  ֽϴ. 
	( ѹ WM_SETCURSOR   ϰ CM_CURSORCHANGED ļ 
	 ϴ ... CM_CURSORCHANGED ڵ鷯 Լ WM_SETCURSOR  
	 ϴ ణ ڵ Դϴ.  ణ   WM_SETCURSOR 
	ٷ  ʰ ణ ܰ踦 ġ  ֽϴ.) 
	
	ھ.. ⼭ ϱ? ˼ϰԵ.. ƴմϴ. vcl,  mfc û 
	Ը ƴմϴٸ,   ¥  Ŭ Դϴ.  
	 ۳Ʈ  Ÿ ƴ θ忡  ü ϱ 
	 ׿  ó ϸ  ϴ. (θ忡 
	ó  ƾ vcl mfc ۼ ڵ庸 ũ  ڵ带 
	 ֹԴϴ.) 
	׷  WM_SETCURSOR ޽  ڵ鷯 ü  ֽϴ. 
	·..  ڵ鷯 ο ణ ( ʼ) ڵ ӿ 
	   ½   ߰  ֽϴ. 
	
	Windows.SetCursor(Screen.Cursors[Cursor]); 
	
	̰ ? C++ ڸ, Windows::SetCursor(Screen->Cursors[Cursor]); 
	̷ . ׷, ũ Ŭ ˰ڴµ, Windows Ŭ 簡? 
	 Ŭ ٷ  apiԼ   ϴ ŬԴϴ. 
	ƴ, ˼մϴ.   ƴմϴ. Ҹı? . 
	տ  Ѱ,    ϱ  ѹ ĺô. ^^ 
	
	Ŭ..  ,   Windows Ŭ ƴմϴ. ӽ̽. 
	(̰  ּҰ.. ̸.. ̵  å.. ô..) 
	windows.hpp ȭ ,   Ŭ ͸ ܶ ֽϴ. 
	׸   SetCursorԼ ϸ ãƺ ȳɴϴ. ? ̻? 
	׷     ҽ windows.pas  ɴϴ. !? 
	׷, ⼭ ̿ api Լ ȣ  ִ  ؼ   
	ֽϴ.  ٷ  Դϴ. 
	
	function SetCursor; external user32 name 'SetCursor'; 
	
	ĽĮ ҽ  ˾ƺǰ̴ϴ. ٷ user32.dll Ե Լ 
	SetCursor ȣϴ ̴ϴ. (32 ⺻ api  user32, gdi32, kernel32 
	 dll Ե Լ  ˸ е  ƽ?) 
	ھ.. ĽĮ ̷  api ȣմϴ.  ܰ ִ°  
	κ api  windows.pas ̷ ش dllκ   մϴ. 
	׷ ???   ſ? @.@ 
	
	¬.  ʹ ûϱ.  ְ ѹ Ẹ غǵ... 
	  ּ.  ô   ؼ  غ̴ϴ. 
	
	˰ ô  ׳ Ѿֽñ. 
	翬 ű  ֳ.  ̱  徾ε. 
	vcl  Ѵٸ c++ Ϸ ƴ. ? 
	 api ݿ   vcl 丮 ƴ Ŭ 丮 Ʈ 
	ֽϴ. 尡 ÷  Ϸ Ǿ ű ־. 
	ش ⸶   ֱ.. SetCursor winuser.h ֽϴ. 
	⼭  api Լ Ʈؿ ͵   ֽϴ. 
	(    M$  Դϴ.     پֽϴ. 
	Copyright (c) 1985-1996, Microsoft Corp. ?  ϸ  85  ߴ 
	ñ⿡  Ϸ ڳ. ׵鸸  ȴٱ? , ׷ 
	ǰ..  Ҽ  ò? ³׵鵵  Ѵϴ.) 
	
	ھ... ..    ߽ϴ.  츮  
	ƹ  MyLabel->Cursor = crHandPoint; ̷  δ 
	  Ǵ. ׷ ׷ ʿ䰡  κ ϴϱ 
	  ߴµ ̷ ׿.. ɵ µ    
	ð? (̸ ߽ϴ... --;;;;) 
	
	
	 :  Ŀ ϱ 
	 
	
	.......  ѹ Ѱ..       Ŀ 
	 ϴ  ˾ƺô. ׷ϱ.. ⳪ г  رԴϴ. 
	  û ޾ƺϱ.. ⼭  ϰ~! 
	 ַ غڽϴ. 
	
	   Ŀ ô. ״ ''ϱ   
	˴ϴ. ַ İ?  Ե ̹ ʹ ׳ ΰ? 
	̷ . ^^ 
	 ̹͸ մϴ. ׸   غô. 
	
	1. File ޴ New ׸ 'Resource files (.res)'  ؼ  
	   ҽȭ Ѵ. 
	   (׸ ׸ ִ ׸  ٷ Ƣ ʴµ  Ȳ 
	    ʵ Ѵ. ⼭ Ȳ ϸ ߿ ϴ  ¼ ִ.) 
	
	2. ȭ鿡  â(Ʈ) Contents  ڿ 콺 Ű  
	    ˾ ޴ ٽ New->Cursor ׸ ؼ Ŀ . 
	
	3.  ̸ .  ҽ  ̸ ٿ ＼ Ǵµ, 
	   Ʈ  Cursor1̶ ̸ ¯. ߿ ڵҶ 򰥸. 
	   ׷ϱ Cursor1̶ Ǿִ  õõ ι Ŭؼ Ʈ ° 
	   ǵ  , ̸ . ̸  ص , ⼭ 
	   н ȿ ̱  IMPCURSOR . 
	   (н ȿ   ֳİ?  .  ڶ.) 
	
	4. ׸  ׸İ? ȱ׷ ٻ۽ð ɰ   ҽ  
	    .  ׸. 
	    ̸ ׸ ŬѴ. ׷    ϴ ׸׸ 
	   ǶⰡ ´.  ׸. ⼭ ƹų ׷ , н 
	   ȿ ̱ ...   ׷.     ȳ 
	    ũ ͳ.. 켺   ϸ ȴ. 
	   (⼭ ۰ȣ   ٳ ׸  복   
	     ü ִ.) 
	
	5. ֽ Ѵ. ֽ İ? (ð ұ.) Ʊ ߴ. 
	    ŵص ȴٰ Ѱ ̾. ٽ ũؼ ãƺ.  Ѵ. 
	   ̹Ϳ ֽ Ϸ θ޴ Cursor ׸񿡼 Set Hot 
	   spot ϸ ȴ. x, y ǥ  ɹٸ! ϰ . 
	
	6. Ѵ. ̸   ȴ. ׷ٰ Ʈ  ҽȭ 
	   (Ʈ̸.res)  ȵȴ.   ϸ ߿ Ʈ 
	   ũ  Լ ý÷Ÿ  Եȴ. Ʈ ȭ̸ 
	   . 
	
	7.  ؼ   Ŀ Ե ҽȭ . 
	   ̳İ?   ȭ Ʈ Ϻ  Ƴ. ׷ϱ 
	   Ʈ ԽŰ.  ϳİ?   ,  ã  
	     ޴ ִ Project ׸񿡼 Add to Project  Ŭؼ  
	    ̾α ڽ   ҽ ȭ ã ɹٸ! ϰ 
	    ȴ. 
	   ( ô, Ʈ  .cpp Ͱ ״ Ǿִ   
	     ҽȭ ã . ҽȭ Ȯڰ .res.) 
	
	... ̷ ؼ ڵ ұ. .. ׷ ڵ   
	 ô. 
	
	1. 翬  Ʈѿ Ŀ ٲ ؾ ȴ. 
	   ̰͵ ϱ  е   Ѵ.  label ϳ 
	   ߸ ĸ " ~!"  غ. label  ڿδ 
	   ũⰡ ʹ Ƿ    ϴ   Ƽ ۹ 
	   ϴ ͵ . 
	
	2.  ŬѴ.  Ŭϸ  OnCreate ̺Ʈ ڵ鷯 ڵ 
	   Ǵ ͵ 𸣴   ϼ̴.  ٽ ÷ 
	   . ׸ ڵ   ִ´. 
	
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	    TCursor crImp = TCursor(5); 
	    Screen->Cursors[crImp] = LoadCursor(HInstance, "IMPCURSOR"); 
	    Label1->Cursor = crImp; 
	} 
	
	   Label1 İ  . Ʊ   label ̸ ָ ȴ. 
	
	3. ?? 
	    ٸ? F9  غ. . 
	   Ƹ label         ̴. 
	   label Ŀ  Ÿ   ̴°? 
	
	
	
	.....~ 
	鱺..  ô е ̰. ߰߰ 峭  ϰ 
	ģ .. ּ.. ְ    ѹ ηýϴ. 
	
	̹ , ׵  Ȧ   ǹ̷   ĺýϴ. 
	(? ƹ  ȵȴٱ? -.-;;;;) 
	
	ϵ   øڽϴ. ... ̹ Դ ڳ׿.. .. 
	(̶󱸿? õ...) 
	׷..  ٽ   ãƺ  ӵ帮鼭.. ̸...
	 
	 
36  /  !   ʿ Ȱ뿹
	,   Ȱ뵵 ô  !  ؼ ˾ƺô. 
	
	
	                                                                   
	! ! 
	 
	
	..  32Ͽ, ׸ (Ȥ ̿ ) Ẹ 
	 е   ༮       
	е ̴ϴ. ( ϴ... --) 
	 Ƽ      . 
	  Ÿ ö 'Ƽ XXX' Ȥ 'Ƽ½ŷ XXX'  
	(⼭ XXX ̻ϰ ؼ ..)   .. ñ.. ܰ 
	  η... ~~~ 
	
	㸸~!  X X( ̸)   ƹ 带  
	 հ  ٰ ֹ  ִ  δ  Ǿ. 
	 api    մϴٸ... ! 
	 Լ ׷ .. ~ 
	׷ vcl  Ǵ ,  ̰͵ api  , 
	׷  ϱⰡ ϴϴ. 󸶳 ϱ ϳı? 
	Ƶ  ϱ... ݺ ϴ. 
	
	
	
	? 
	 
	
	..  尡  𸣽 е ,  Ϲ 信 
	   캾ô. 
	Ƽ  ôٰ ص, Ƹ Ƽ½ŷ̶   ƽ ̴ϴ. 
	(ĸ͵ ˴!) 
	
	  ̷п   Ǳ  Ȯ Ǵ  , 
	Ϲ Ƽ  Ƽ½ŷ̶   ǹ̷ Դϴ. 
	ٽøϸ?  ϳ ۾̶ ؼ  ִٴ . 
	Ƽ½ŷ̶  ÿ  ø̼   ִٴ  
	ƴմϴ!  Ƽ½ŷ̶   'ø̼'  ƴ  
	'۾'   ִٴ . 峭 ? ׷ Դϴ. 
	
	32 Ŀ  ø̼  ϳ ̻  Ǿ ֽϴ. 
	'ϳ ̻'̶  ,  ø̼ Ʈ ϳ 尡 
	Ǵ ¶ Դϴ. ٽ ؼغ,   Ʈδ ϳ ۾ 
	, ø̼ ϴ ܰ迡 'ణ'   ָ 
	ϳ ø̼ ÿ  ̻    ִٴ  . 
	 ذ ȵǽø,  ؼ ϳ ø̼ ȿ ϳ 
	ø̼   ִٰ ص ǰڳ׿. 
	
	
	ܰ1 :  Ŭ ٱ  
	 
	
	(Ȥ ) ,  api  Լ ״ 
	 ,  oop  TThread Ŭ ̸ غǾ ! 
	 Ϳ ӹ޾Ƽ Ŭ ϸ ˴ϴ. 
	ϴ  ڵ带 . ڼ  ʿ .. ׳ TThread ӹް 
	ִٴ , ׸ Լ ڿ Execute()  ΰ ͸ μ. 
	
	// unit2.h 
	//--------------------------------------------------------------------------- 
	#ifndef Unit2H 
	#define Unit2H 
	//--------------------------------------------------------------------------- 
	#include <Classes.hpp> 
	//--------------------------------------------------------------------------- 
	class my : public TThread 
	{ 
	private: 
	protected: 
	    void __fastcall Execute(); 
	public: 
	    __fastcall my(bool CreateSuspended); 
	}; 
	//--------------------------------------------------------------------------- 
	#endif 
	
	
	// unit2.cpp 
	
	//--------------------------------------------------------------------------- 
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "Unit2.h" 
	#pragma package(smart_init) 
	//--------------------------------------------------------------------------- 
	__fastcall my::my(bool CreateSuspended) : TThread(CreateSuspended) 
	{ 
	} 
	//--------------------------------------------------------------------------- 
	void __fastcall my::Execute() 
	{ 
	    //---- Place thread code here ---- 
	} 
	//--------------------------------------------------------------------------- 
	
	.. ۺ ̷    ϰھ.. ~ ? 
	̷ ϰ  غ̴ Ŭ  ۼؾ ȴٸ... 
	 ̰ Ⱦ ϴ! ^^ 
	
	̸  Ÿ  ּ̳ ䷱ 鼭 ġ ä е ְ.. 
	(̵)  ⺻ ٱ ڵ(̷) شϴ. ? ^^ 
	 ϳ...  File ޴   ִ New ׸ Ŭؼ  
	New Item ̾α׿ ù° ǿ ִ ܵ ߿(  ø̼ 
	, ۳Ʈ, , dll,   ׸ ) 'Thread object' ִϴ. 
	 ̰ Ŭ! ׷  ϴ. 
	' Ŭ ̸  Ұ?...' 
	  ... н ȿ ̱ , ̸ ̷ ٿô. 
	ImpThread. ? 
	
	
	 : 󸶳 ٱ 
	 
	
	ھ.. ̷ ϸ  ó ޱ ڵ    
	ڵ˴ϴ. ? װɷ ΰ? Ծ! ^^ 
	
	    ڱ׸  ƴ϶, ϰ ū α׷ 
	̱ ,  Ȱ뵵   . ۱  TThread Ŭ 
	޼ҵ Ƽ ص ѵΰ ƴ϶ϴ. ׷ ۿ  , sdk 
	 峭ƴϰ    api κ Ŭȭ... 
	
	׷     忡     ټ ? 
	... õ ~! Դϴ. ^^;;; 
	带  Ϸ з  å ѱ εٰ, 
	ٵ...   𸨴ϴ! (~!) 
	׷.. ̷̷ ..  ~! ,  嵵  
	   ϳ 鼭 ־ غô. 
	
	
	
	 غ 
	 
	
	 ϴ...  ٷ~ 
	̷  ̴ϴ. for 鼭 ޽ óϷ? 
	for   ִ ȿ ø̼ ü busy ̹Ƿ Ư 
	ó   ø̼ǿ Ѿ ޽  ó ä 
	޽ť  .  ° ٷ '' ¶ϴ. 
	 ̰  ذϱ  for   Application->ProcessMessages() 
	 ϴµ..  ޼ҵ   ۾  ѳ ޽ť 
	 ޽ óϴ  . 
	..     . ű for  ڵ尡  
	  ̳  Application->ProcessMessages() ؾ ϰ.. 
	ϱ 翬 ð Ȯ 䱸Ǵ ۾  ȵ˴ϴ. 
	̷ ٷ 带 ϴ.   , ⼭  Ȱ뵵 
	  ϴµ  ̰ڳ׿. 
	
	
	ܰ 2 :  Ŭ ڵ ۼ 
	 
	
	ھ.. ׷ ڵ带 ۼغô. Ʊ  ImpThread ״ ? 
	ű 峭 ĺô. 
	
	__fastcall TImpThread::TImpThread(bool CreateSuspended) 
	    : TThread(CreateSuspended) 
	{ 
	    Priority = tpTimeCritical; 
	} 
	
	ٱ ڵ忡ٰ   ߰Ѱ̴ϴ. ? 
	⼭ Priority TThread Ŭ Ƽμ..   ۾ 켱 
	 մϴ. tpTimeCritical   ܰμ, ð  ּȭǾ 
	ϰų  ƹ ٻ Ȳ̶ ݵ Ǿ  ۾ Ҷ 
	 tpTimeCritical մϴ. ݴ    tpIdlḛ,   
	tpLowest, tpLower, tpNormal, tpHigher, tpHighest, ׸ tpTimeCritical 
	 մϴ. 
	׷, ⼭ tpTimeCritical  ?   غ? ƴմϴ. 
	׳   غýϴ.  . 
	
	׸.. ̹ ״ ٱ Execute()Լ ٵ𿡴 ڵ带 ۼ 
	ô.  ִ ּ(" ڵ带  ᰥܶ")   
	 Ͻð..   ۼغô. 
	
	void __fastcall TImpThread::Execute() 
	{ 
	    static int qq = 0; 
	    while(!Terminated) 
	        Form1->Caption = qq++; 
	} 
	
	qq  ƽ ߽ϴ. ̷μ   Execute()Լ 
	̸鼭  Ÿ  ˴ϴ. (𸣸.. C/C++  
	 ) 
	Terminated ?  ڽϱ.    ƴѵ   
	翬 TThread Ŭ .  Terminated Ƽμ  尡 
	۾ θ  ֽϴ. ׷ϱ..  ϸ, 
	۾̸ 1 ĸ qq++ ض.. ׷ . 
	׷ 1 ĸ ģXó Ķ~~~ īõǰ ִ ڷ ž 
	Ȳ  ϰ? ^^ 
	
	ھ.. Ѱ  ϰ    ô. ı?  Form1 
	＼ ݾƿ. ׷ 翬 Ŭ ؾ. ȱ׷ Ϸ ? 
	#include "Unit1.h" 
	..  Ŭ  ϴ. ̸ ϳı? ׷ϱ  
	! ׷..    Ŭ ü ϰ 带 ϴ 
	ڵ带 ۼغô. 
	
	Ʈ  Form1 ư ΰ Ĳ~! Ĳ~! ϰ ô. 
	׸  ĸ "!", "!"  Դϴ. ׷Ŀ.. 
	"!"̶ ĸ  Button1 Ŭؼ OnClick ڵ鷯 , 
	׾ȿ ڵ带 ۼսô. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    ImpThread = new TImpThread(false); 
	} 
	
	ٵ ⼭  ImpThread TImpThread ʹ 𿡵   
	ʾ?  ޸   Ǵ ͸ ڵ  
	ʽϴ. ׷  ݽô. ٰ? װ͵  ؿ? 
	, Ŭ ֵ Ȥ ֿ  ϵ , 
	Ŭ Ѱ  ̴ϱ    Button1Click() Լ ٷ 
	ٰ ݽô.  ϰ ʹٰ?  ϱ? 
	
	TImpThread *ImpThread; 
	
	.. ׷ ⼭ ..  Button1Click() Լ  Ҷ Ѱ 
	bool  false ǹ̿  ¤ô. 
	   ÿ ٷ    ְ, ݴ  
	س  ߿   ֽϴ. ó false Ѱָ 
	ٷ  մϴ. ݸ鿡 true Ѱָ  ϰ   Ƿ 
	ʿҶ ImpThread->Resume(); ϸ  ˴ϴ. 
	
	׸.. ̹ Button2("!" ĸ  ư) Ŭؼ ڵ鷯 
	ۼغô. 
	
	void __fastcall TForm1::Button2Click(TObject *Sender) 
	{ 
	    ImpThread->Terminate(); 
	    delete ImpThread; 
	} 
	
	.. ?  Ұ Դϴٸ..   ڸ, 
	Terminate() 翬 TThread ޼ҵμ,   Ű . 
	׸  ̻   带 ϰ. 
	
	 ܰ : غ! 
	 
	
	Դϴ.  Ȳ,  ۼ ڵ Ұ  ä  ? 
	׷ غ, ĸ  ģ X ó ڸ īƮϰ ְ, 
	׵ȿ ġ ø̼ ƹ ϵ ϰ ִ ó ޽  
	óմϴ. ǥ ĸǹٸ 巡غ, ٻڰ ī ϴ ε 
	ұϰ 巡ϴ 콺޽  մϴ. ű? ^^ 
	
	
	
	  
	 
	
	  Դϴ. 
	ڸ..      ó ġ  ū Դϴ. 
	ٷ⵵  ʱ.  vcl     Ͽ 
	 ְ 峭ó   ִ Ŭ ϴ. 
	
	Ͽ  带 Ȱϴ ٸ  ڽϴ. 
	  带  ͵, Ͽ    µ   
	ʼ̱ Դϴ.  ̸  ʰڰ..   е Ÿ 
	ٸ ̶ ͸ Ͷص. 
	 ⿡    öԴ  ִ ε, 
	 ε 亯 ö   ŵ. 
	
	
	õ   . ۾µ νð  ɷȽϴ. 
	 .. ٽ ѹ غ.. Ȥ ԰ų Ǽ κ   
	ϸ.. ~ 
	
	׷.. ǽñ ٶ鼭, ̸...

 
37  /  ! Ų α׷  ˾Ƴ
	 , ٸ α׷ Ų Ŀ,  α׷   
	˾Ƴ ̴ϴ. 
	
	.. Ʒ   ܿ, FindWindow() Ἥ Ų α׷ 
	  Ȥ Ǿ ˾Ƴ ִٰ ϴ е ð.. 
	     ˴ϴ. ? 
	 , ޸ ߴٰ غô. ׸  ðݸ 
	(Ÿ̸Ӹ  ǰ.) NotePad Ȥ ޸ ̶ ŸƲ  츦 
	ã´? ޸  ĸ ȭ̸ Եȴٴ  ĳ, 
	ڰ Ƿ Ų ޸ α׷ Ų ޸  
	ϳ? ȵǰ...? 
	
	׷..  ݺ Ϸ ϴ ,  α׷ ϰ 
	 ִ  Process ڵ  Ǻմϴ. װ͵   
	ִ ο.  Ÿ̸Ӵ  ʰڽϴ. 
	(,    TI Ͽ ϴ.) 
	
	
	.. ٸ ø̼ Ű    غô. 
	 WinExec() ShellExecute()  ̴ϴ. , ̵ Լ 
	 α׷ μ ڵ ˾Ƴ   ϴ. 
	׷..   , CreateProcess() Լ ̿ϵ սô. 
	 CreateProcess() WinExec() 32Ʈ μ, ų α׷  
	û     ְ,  ˾Ƴ  ֽϴ.    
	μ ڵ 翬 ԵǾ ֱ. ׷, α׷ ų 
	δ CreateProcess() ̿Ѵٰ سô. 
	
	ι°.. ش μ   ˾Ƴ  غô. 
	Ʊ غ FindWindowδ μ ڵ 𰡸 ˾Ƴ  . 
	翬Ѱ, FindWindow() μ  Լ ƴ϶ ܼ ڵ  
	Լ̴ϱ. ׷   ? 
	  ְ..  TI ϴ    
	̴. TI WaitForSingleObject() Լ ϴ.  Լ, 
	 ü Ư ̺Ʈ  ð ٸϴ.  .. 
	DWORD WaitForSingleObject(ڵ, ٸð); 
	 ð 100 1 Դϴ. 
	⼭  üδ 峪 μ, ؽ  ֽϴ. 
	׸ μ ڵ Ѱָ,  ð  μ Ǿ 
	˻ϰ, Ǿ WAIT_OBJECT_0,  ʾҴٸ WAIT_TIMEOUT 
	մϴ. 
	
	
	ھ..  غ ϴ. 
	ڵ带 ۼغô. CreateProcess()  û  ؼ 
	  ʰڽϴ. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    STARTUPINFO start; 
	    memset(&start, 0, sizeof(STARTUPINFO)); 
	    start.cb = sizeof(start); 
	    start.wShowWindow = SW_SHOWDEFAULT; 
	    SECURITY_ATTRIBUTES sec; 
	    sec.nLength = sizeof(sec); 
	    sec.lpSecurityDescriptor = NULL; 
	    sec.bInheritHandle = TRUE; 
	    PROCESS_INFORMATION pinfo; 
	    if(CreateProcess("c:\\windows\\notepad.exe", NULL, &sec, &sec, TRUE, 
	        0, NULL, NULL,  &start, &pinfo) != TRUE) 
	    { 
	        ShowMessage(AnsiString("CreateProcess() failed: ") + GetLastError()); 
	        return; 
	    } 
	    DWORD waitresult; 
	    do 
	    { 
	        Application->ProcessMessages(); 
	        waitresult = WaitForSingleObject(pinfo.hProcess, 100); 
	    } while(waitresult == WAIT_TIMEOUT); 
	
	    if (waitresult == WAIT_FAILED) 
	    { 
	        ShowMessage("WaitForSingleObject() failed"); 
	        return; 
	    } 
	    CloseHandle(pinfo.hProcess); 
	    ShowMessage("!"); 
	} 
	
	ҽ ؼ    . , ٸ   ϱ 
	 ޽ ϱ  Application->ProcessMessage();  ߰. 
	̷ ó   翬 α׷ '' ° ǰ? 
	
	 TI μ ڵ带 Ǻϴ ڵ尡 ߰Ǿ־ϴٸ, 
	 ڵ带  ʿ  ,  װ Ϸ api Լ ϳ 
	Ծ ϴϱ...  κ Ͽϴ. 
	
	
	ؼ  غñ ٶϴ. ٸ  Դϴ. 
	и Ų ޸ ɶ "!" ̶ ޽ . 
	׷    TI   Ѱ ġ 
	 ֽϴ. 
	
	ϵ μ    ޽  , ø̼ 
	  ʽϴ. Application->ProcessMessage()  ó   
	޽ ϳ, WM_QUIṮ Դϴ. 翬ϰ? ׷ ϰ ִ 
	  WM_QUIT ޽ ׳ ޽ť ׿ִٰ, ޸  Ŀ 
	ڱ ľ~! ϰ α׷ ϴ. 
	
	  óֱ     ɱ? 
	 WM_QUIT ó Ƿ OnClose  ص ҿϴ. 
	׷, OncloseQuery óϸ ǰ? 
	
	  ڵ峻  ٸ ߰սô. 
	    ٸ ߰ϸ ǰ? 
	   if(NowClose) 
	       return; 
	
	 NowClose Ƿ ڵ峻  Դϴ. , Ȥ  Ŭ 
	 ְ, OnCloseQuery ָ ˴ϴ. 
	׷.. ü ҽ  ƾ մϴ. 
	
	bool NowClose; 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    STARTUPINFO start; 
	    memset(&start, 0, sizeof(STARTUPINFO)); 
	    start.cb = sizeof(start); 
	    start.wShowWindow = SW_SHOWDEFAULT; 
	    SECURITY_ATTRIBUTES sec; 
	    sec.nLength = sizeof(sec); 
	    sec.lpSecurityDescriptor = NULL; 
	    sec.bInheritHandle = TRUE; 
	    PROCESS_INFORMATION pinfo; 
	    if(CreateProcess("c:\\windows\\notepad.exe", NULL, &sec, &sec, TRUE, 
	        0, NULL, NULL,  &start, &pinfo) != TRUE) 
	    { 
	        ShowMessage(AnsiString("CreateProcess() failed: ") + GetLastError()); 
	        return; 
	    } 
	    DWORD waitresult; 
	    do 
	    { 
	        Application->ProcessMessages(); 
	        if(NowClose) 
	            return; 
	        waitresult = WaitForSingleObject(pinfo.hProcess, 100); 
	    } while(waitresult == WAIT_TIMEOUT); 
	
	    if (waitresult == WAIT_FAILED) 
	    { 
	        ShowMessage("WaitForSingleObject() failed"); 
	        return; 
	    } 
	    CloseHandle(pinfo.hProcess); 
	    ShowMessage("!"); 
	} 
	
	void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) 
	{ 
	    NowClose = true; 
	} 
	
	   Դϴ. , μ ϰ ٸ ƾ 
	    ̾ϴٸ,   ε  
	 ؼ,  带  ʿ䰡 ٴ  . 
	
	׷, ǽñ ٶϴ. 
	 
	38  /  ! ̸  VCL Լ
	  ̸  vclԼԴϴ. vcl  Ŭ ̺귯̱ , 
	Ư Ŭ    Լ鵵  ִµ, ٷ  Լ ű⿡ 
	մϴ.   Լ  . ھ.. ׷ .. 
	(˾ƺ  PACKAGE簡, __fastcall̶簡, const, ̵  ϴ.) 
	
	־ FileName Ȯڸ Ư Ȯڷ ٲٷ ChangeFileExt()  ˴ϴ. 
	AnsiString ChangeFileExt(AnsiString FileName, AnsiString Extension); 
	
	 Լ ־ нκ ̺, 丮 н, Ȥ ϳӵ 
	иݴϴ. 
	AnsiString ExtractFileDir(AnsiString FileName); 
	AnsiString ExtractFileDrive(AnsiString FileName); 
	AnsiString ExtractFileName(AnsiString FileName); 
	AnsiString ExtractFilePath(AnsiString FileName); 
	
	 Լ ־  н Ư нκ  н ݴϴ. 
	AnsiString ExtractRelativePath(AnsiString BaseName, AnsiString DestName); 
	 , 
	ExtractRelativePath("C:\\Program Files\\qqq\", 
	                    "C:\\Program Files\\WinZip\\Winzip.exe"); 
	̷ Ѱٸ, ϵǴ  "..\\WinZip\\Winzip.exe"Դϴ. 
	
	̸ Ǿִ н ª ̸ н(8.3) ٲٷ 
	ExtractShortPathName()  ϴ. 
	AnsiString ExtractShortPathName(AnsiString FileName); 
	
	 Լ   ԼԴϴ. ĸ, ־ н ȭ󿡼  ִ밪 
	̳ ̷   κ ...(ȣ) óݴϴ. 翬  
	 Ʈ    ʿϹǷ ĵٽ  ѱϴ. 
	AnsiString MinimizeName(AnsiString Filename, TCanvas * Canvas, int MaxLen); 
	 ,  ǥ鿡  ε ̸ ȼ 100 ̳ ̷, 
	MinimizeName("C:\\Program Files\\WinZip\\Winzip.exe", this->Canvas, 100); 
	̷ ϸ . 
	
	  Լ ̺곪 丮 κ  ϳӸκ ü 
	θ  ԼԴϴ. Լ ణ ٸ.. ϴ ô. 
	AnsiString ExpandFileName(AnsiString FileName); 
	void ProcessPath(AnsiString EditText, char &Drive, AnsiString &DirPart, 
	                 AnsiString &FilePart); 
	ExpandFileName() ־ ϳӿ  н ٺԴϴ. ̿ʹ  
	ProcessPath() ̹ ־ ̺, 丮н, ̸ ؼ ü 
	θ . 
	
	ļ~~~  Լ   ԼԴϴ.   Լ ϳε   
	 .  մϴ. İ? ^^ 
	־ ϳ Ư ǿ ´ ˻ϴ ԼԴϴ. ϴ Ÿ 
	ô. 
	bool MatchesMask(AnsiString Filename, AnsiString Mask); 
	 ڸ  ..  ô. 
	
	  Ʈ Ʈ ΰ ϴ. ׸ Edit1 Text Ӽ   
	մϴ. "[a-s][1-3][k,v,f]*.*" 
	ι° Ʈ Text "b2v.qq" ̷ ô. 
	׷, ư ϳ ,  OnClick ̺Ʈ ڵ鷯 ۼսô. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    Caption = MatchesMask(Edit2->Text, Edit1->Text) ? "OK" : "No!"; 
	} 
	
	   ĸ OK  ٲϴ. ׷  ߿ ΰ Ʈ ؽƮ 
	  ٲ㺾ô. 
	
	⼭ ̴ ũ  Ưմϴ. *  ? ȣ  ̴ 
	ϵī ڷμ, ݹ ˾ƺð.. 
	[a-s]     ʿϰڳ׿.  [  ]   κ ϳ ڸ 
	ǥմϴ. (  ȣ  ¿  .) ׷ϱ, [a-s]  
	־ ġ ڰ a s  ̸  true ˴ϴ. 
	׸ [k,v,f] ־ ġ ڰ k,v,f  ϳ̸ trueԴϴ. 
	
	  ϳ ô. 
	 .. ϳ g Ȥ w ۵ǰ, ° ڰ t z̿ 
	Ѵٸ   ũ ָ ˴ϴ. 
	"[q, w]?[t-z]*.*" 
	˰ ?    Ẹ ϸ.. 밡ٶϴ. 
	
	  Դϴ. 

 
39  /  ! Ʈ 濡 ׸ ֱ
	ϴ..  ... 
	Ʈ(Ȥ Ʈ ) 濡 ׸ ֱԴϴ. 
	
	Ʈ  api ϸ , Ʈ 濡 ׸    
	ٴ  ˰ ɰ̴ϴ. 
	..  ȭ鵵 Ʈε..   ׸?? 
	и  ֱ ִٴ ε.. ? ^^ 
	
	,  Ʈ 濡 𰡸 ׷ֱ , Ʈ並 Ŭ 
	غô. Ŭ?   ΰ? ..  ƴϰ.. 
	 ӹ޴´ٴ ǹ, api Լ ϴµ ־ ǹ̰  
	޶,  ν ٲġ ش 쿡 ޵Ǵ ޽ ä 
	 մϴ. (ŷ..̶ ϴ.) 
	
	Ե...(?)  ,  ǰ ƴϰ, ̶ϴ. 
	 ó bcbdev.com(www.bcbdev.com)Դϴ. 
	 Ʈ  ѹ Ұȴ  ..  ο  
	߰Ǵ,   Ʈ. 
	
	ھ.. ׷  ? 
	Ŭ ,    ϰԳ Ⱦ ô. 
	 ( ڵ  ִ, VCL  Ʈѷ  ִ 
	Ʈѵ  ! ) ü ڵ  ޵Ǿ  
	 ޽ óϱ   ν  ֽϴ. 
	Ÿ   ŷ..   ν api  α׷ 
	,  Ŭ  ϳ ϵ˴ϴ. api ʶ    
	̶,  Ŭ  찡 ʷ Ǳ   ؼ 
	ؾ߸ Ѵٴ   Ͻ ̴ϴ. 
	
	  ν, տ  ߴٽ,    
	޽ switch~case  óϴ  Ǿֽϴ. 
	׸,  ̹ Ǿִ ,   ν ٲĥ 
	 ִٸ, 翬 Ư  ޽ ؼ ⺻   ܿ 
	ΰ, Ȥ  ɰ ٸ   ϰ   ְ. 
	
	׷, (ֵ ?) vcl δ   ν 
	ٲĥ  ϴ. .. ϴٱ , 翬 ̰. 
	׷.. api ؿ  ν ٲġ  ״  . 
	
	api α׷ֿ,  Ŭ ϵ  Ϸ(  
	SetWindowLong() Լ մϴ. , 翬  ν ٲĥ  
	 Լ մϴ. , 
	SetWindowLong(شڵ, ٲĥʵ, ٲĥ); 
	̷ϴ. ⼭ó  ν ٲģٸ, 
	SetWindowLong(شڵ, GWL_WNDPROC, ν̸); 
	̷ ϸ . 
	
	 ν ü  Լ. ׸, ޽ óϴ  ̹Ƿ 
	Ѱְ ޴ ڵ Ʈ SendMessage() Լ   մϴ. 
	 ϰ LRESULT ؾ ϰ, ȣĢ CALLBACK ؾ մϴ. 
	(, LRESULT LONG,  long̰, CALLBACK __stdcall .. ^^) 
	׷,  Լ    ˴ϴ. 
	LRESULT CALLBACK ControlWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, 
	                                LPARAM lParam) 
	,   api   ɴϴ. 
	
	ھ.. ׷   ڵ带 ۼغô. 
	,  Ʈ ϳ ,   Ʈ ϳ ̹ ϳ 
	ô.  ߿  ƴ, ڵ ̱   ׸ ƾ 
	ֱ ٴ ̹ ̸ ÷ ׸ BitBlt() Ʈ信  
	սô. 
	
	, ٲĥ   ν ۼغô. 
	
	LRESULT CALLBACK ListViewProc(HWND hWnd, UINT uMsg, WPARAM wParam, 
	                              LPARAM lParam) 
	{ 
	    switch(uMsg) 
	    { 
	        case WM_ERASEBKGND: 
	        BitBlt((HDC)wParam, 0, 0, Form1->ListView1->Width, 
	            Form1->ListView1->Height, Form1->Image1->Canvas->Handle, 0, 0, 
	            SRCCOPY); 
	        return 0; 
	
	        default: 
	        return CallWindowProc((FARPROC)FOriginalProc, hWnd, uMsg, 
	                   wParam, lParam); 
	    } 
	} 
	
	  ĺ ҽ   ¿, ʿ   
	  · ϴ. 
	
	 ׷ ϹǷ, ׸  WM_ERASEBKGND ޽ ó κп 
	 ϴ  翬ϰڱ.. 
	
	BitBlt() Լ  ׳  dc ٸ dc ׷ ִ ̹  
	īִ ԼԴϴ. 
	(StretchDraw()  ͼ vcl Լ鵵  BitBlt() .) 
	
	׸  default: ̺ ڿ  CallWindowProc() Լ  
	 ν ޽ ѱ鼭 Ű ԼԴϴ. 
	⼭   ν ȣϱ  Ǿ. 
	(   ޽   óϰ  ,  
	ν Ű ʰ   óּŵ ϴٸ.. ׷  
	 ð? ^^) 
	
	̹,  ν  ٲġ ƾ ۼսô. 
	 ڵ带 ۼ  ִ  α  ϳԴϴ. 
	 OnCreate ڵ鷯̰ų, Ȥ  . ֳϸ, Ʈ䰡 Ǳ 
	 Ǿ ϱ Դϴ. 
	 ҽó,   Ŭ ڿٰ ۼغ. 
	
	__fastcall TForm1::TForm1(TComponent* Owner) 
	    : TForm(Owner) 
	{ 
	    FOriginalProc = (WNDPROC)SetWindowLong(ListView1->Handle, GWL_WNDPROC, 
	                                           (LONG)ControlWndProc); 
	} 
	
	, GetWindowLong()   ν  SetWindowLong() 
	  ν Ҵϴ ڵ忴ϴٸ, SetWindowLong()  
	 ν ϹǷ, ϰ   ٿϴ. 
	ٷ FOriginalProc   ν ϰ ִ ű. 
	
	׷  FOriginalProc ϴ κ ־߰?  Ŭ  
	 , ׳ ,  cpp  ٰ عô. 
	
	̹.. 翬   ν FOriginalProc  Ű ڵ尡 
	ʿϰ? 
	ڿ ٲ  ؼ ıڿ Ű . 
	
	__fastcall TForm1::~TForm1() 
	{ 
	    SetWindowLong(ListView1->Handle, GWL_WNDPROC, (LONG) FOriginalProc); 
	} 
	
	ڴ   Ͽ ⺻ Ʋ , ıڴ ȸִ 
	 ۼؾ մϴ. ,  Ŭ    . 
	__fastcall ~TForm1(); 
	
	
	ھ... ׷   ڵ ϴ. 
	ݱ ۼ ڵ   ϴ. 
	(    ״ մϴ..) 
	//--------------------------------------------------------------------------- 
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "Unit1.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	#pragma resource "*.dfm" 
	TForm1 *Form1; 
	//--------------------------------------------------------------------------- 
	
	WNDPROC FOriginalProc; 
	
	LRESULT CALLBACK ListViewProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM 
	lParam) 
	{ 
	    switch(uMsg) 
	    { 
	        case WM_ERASEBKGND: 
	        BitBlt((HDC)wParam, 0, 0, Form1->ListView1->Width, 
	Form1->ListView1->Height, Form1->Image1->Canvas->Handle, 0, 0, SRCCOPY); 
	        return 0; 
	
	        default: 
	        return CallWindowProc((FARPROC)FOriginalProc, hWnd, uMsg, wParam, 
	lParam); 
	    } 
	} 
	
	__fastcall TForm1::TForm1(TComponent* Owner) 
	    : TForm(Owner) 
	{ 
	    FOriginalProc = (WNDPROC)SetWindowLong(ListView1->Handle, 
	GWL_WNDPROC, (LONG)ListViewProc);//ControlWndProc); 
	} 
	
	__fastcall TForm1::~TForm1() 
	{ 
	    SetWindowLong(ListView1->Handle, GWL_WNDPROC, (LONG) FOriginalProc); 
	} 
	
	F9  غô. 
	 ʰ ߴ ̹ ҷԴ ׸ Ʈ 濡  ׷ ? 
	Ѱ ƽ Ŷ, Ʈ  κп ƹ ó  ʾƼ 
	 ؿ ִ  ״ ǰ ..  ܿ  ̴ϴ. 
	 ״ ׷ κп  ó..  ˾Ƽ ϼ! ^^;;;; 
	
	
	  ֽϴ.  Note:  Ͽ س,  ε 
	߿ ε.. 
	SetWindowLong()    ν Ŭ   
	ȵ˴ϴ. ̰Ϳ ,   ̷ο ٰŸ ˷ְ ִµ.. 
	 ؼ, Ŭ  Լ  ƴ Լ, ƹ  
	 ִ  ν   ٴ ̴ϴ. 
	
	̳ ϸ.. 
	Ŭ Լ, δ ù° ڷμ Ŭ νϽ , 
	 this ٰ ϴ. ׷ ؼ Ŭ Լ Ŭ  
	νѴٴ . ? ^^ 
	
	·.. ׷..  ν Ŭ  ϸ,  
	óɶ ڰ ϳ  þǷ,  ν  Լμ 
	νĵ ʴ´ٴ ̴ϴ. 
	c++ ƹ Լ ̸ Ƶ  Ʈ ϰ ġ  
	ٸ Լ νѴٴ (ε, ̶ ?) c++ ⺻. 
	
	׷,  ν Ŭ   ȵ˴ϴ. 
	⿡   ϳ ܵ  س.. װ ġô. 
	     ʹ  ʹ   ϴϱ. 
	
	
	·.. ̷ ؼ Ʈ  ׸    ½ϴ. 
	˷ ..  ҽ ˱  ϰ    
	   ôٴ . , ٺ ̳ κ ϴ. 
	
	׷..   .. 
	.. ȳ..~ ^^

 
40  /  ! comctl32.dll  ˾Ƴ
	ϴ.. 
	    ٺ.. ..   غ ߽ϴ. 
	׷.. ´ comctl32.dll  Ǻϴ ̳ Ẹڽϴ. 
	
	 ø̼(Ȥ  ̵) ۼϸ鼭, comctl32.dll  
	˾Ƴ ,   ɰ Դϴ. 
	ֳϸ, ̳༮     ִ Ʈ ְ     
	Ʈѵ   ֱ Դϴ. 
	
	ǥ , ٸ   ֽϴ. 
	98 ƴ  95 ϰ,  ͽ÷η ѹ  ʾ 
	3.0 ¶, comctl32.dll  0x00040046 Դϴ. 
	 40046̶  Ʈ ԵǾ  Ƿ,   ״ 
	ٸ   Ű.. ù~ ＼ ̼̾!  
	ϴ. 
	 ٻ ƴ϶, ͽ÷η 4.0̻󿡼 ߰ Ʈѵ ϸ 
	  ް ˴ϴ.  4 ߰ Ʈѹٵ ׷,  .. 
	    ƴ϶   ᵵ Դϴ.  ٸ 
	ϱ ؼ Ʈ comctl32.dll Ʈ ؿ . 
	
	̷  , comctl32.dll  ˾Ƴ   ߿մϴ. 
	, δ,  dll μ ġ ͽ÷η   
	 ְ. 
	
	׷..  ..  ˾Ƴ°?? 
	..  մϴ. (ռ .. ð  ´ ٱ..) 
	Ե.. vcl ̴  ˾Ƴ Լ ֽϴ. 
	(Ƹ, 2 ̴   ģ Ŀ  ̾ҳ 
	~) 
	̸ GetComCtlVersion()̱, ڵ , ׳ ȣϸ int  
	 Ѿɴϴ. տ , ͽ÷η 3.0 0x00040046, 
	4.0 ̻ 00040047 ̻ ɴϴ.  Ŀ 00040048 . 
	( Ÿ.. 5.0 Ҵ ׿.) 
	
	  ⼭ .. 
	  comctl32   ƴ ָ ڿ  
	Ϸ?  ġα׷ ̴  ߰? 
	νǵ ͽ   Ư  ִ  ֽϴ. 
	̶ , Ȥ ϳ¥ Ͽ ֽϰ츸 īϵ   .
	 
41  /  ! X ư disable Ű~
	ϴ.. 
	õ.. .. ٻ Ͽ ѱٺ..   ϳ ø. 
	.. ĸǹ   Ÿ ư ư(Xư)  
	ʵ ϴ  Դϴ. 
	
	.. ̰  Ѱǵ.. ~ Դϴ. ~ 
	ó Tom's Builder Page(http://members.xoom.com/demjen/builder/)Դϴ. 
	 Ʈ    ۳Ʈ ҽ ϰ ֽϴ. 
	ѹ 鷯 캸ñ ٶϴ. 
	 IvoryDraw(̷ƮX ۳Ʈ)  Ʈ   ǰԴϴ. 
	
	׷  ..  X ư   ϰ ? 
	,  ó  մϴ. 
	Ʈ createɶ  CreateWindowEx() ȣϰ Ǵµ, 
	 Լ 츦ϴ api Լ. ׸ CreateParams() Լ 
	   쿡 ?Ư ϰ ˴ϴ. 
	 CreateParams()  ϳ ڸ ޴µ, TCreateParams  
	üԴϴ. ׸  ü WindowClass  ǻ api 츦 
	Ҷ  ٷ   Ŭ Ǳ,  WindowClass  
	style  Ư  Ʈμ   Ư   
	ֽϴ. 
	
	츮  ָ   ŸϷ   ִ   CS_NOCLOSE. 
	 Ŭ ŸϿ CS_NOCLOSE ԵǸ, 츮 ϴ   
	 ֽϴ. 
	׷,  CreateParams() ޵Ǵ Ŭ  ߰ 
	ä  ִ°? 
	
	⼭   ִ   ذå ̵Դϴ. 
	Ŭ CreateParams() ̵ϸ,  Ը   
	TCreateParams  ڷ ޵ Ծ  ϴ. ׷ ̷ 
	޹ TCreateParams  Ŭ Ÿ   , 
	 CreateParams() ȣϸ Ǵ°. 
	 Լ ȣϷ, ̽Ŭ TForm Ͽ 
	TForm::CreateParams(Params) ̷ ϸ ǰ? 
	
	׷..  ҽ ô. 
	
	
	 
	void __fastcall TForm1::CreateParams(TCreateParams& Params) 
	{ 
	    TForm::CreateParams(Params); 
	    Params.WindowClass.style := CS_NOCLOSE; 
	} 
	
	  ε CreateParams()  Ŭ  . 
	
	̰ɷ  Դϴ. ؼ غ,  X ư disableǾְ, 
	 ƹϵ  ʽϴ. 
	̶, Ű Ʈ+F4  ᰡ  ʽϴ.

 
42  /  ! Ʈʿ  ϱ~
	~ ص ù  ϴ~ ^^ 
	ε    ?    ۵Ǵ .. ׸ 
	κ е鿡  ۵Ǵ ̱.. ȣȪ~ (̷~ ^^) 
	
	 ,  Ǵ Ͻñ⵵ ϼ̴, Ʈκ  
	ϴ Դϴ. 
	,   ..  '' ̶ Ž  
	 ˾ƺ ô... 
	
	
	, Ʈ̳ wmf, emf   ̹ ҽ. 
	, ܼ ̹ ҽ ƴ϶,   ,  Ư 
	ҽԴϴ. 
	,  üμ     ⺻ ̹(xor ũ) 
	ܿ ó  2ȼ ̹ and ũ ϴ. 
	( ߸ Ųٷ ˷ȴµ..  ̹ xor ũ.. ~ 
	߸ ˷ֽ Ǵ ~) 
	
	 ܿ,   üμ Ŀ   ֱ  ġ 
	  ִ ֽ(hot spot) . 
	, Ŀϵ ܰ   ϹǷ, Ŀ  
	Ǻϱ  BOOL ѹƮ ϴ. 
	
	
	̷ ⺻  Ƿ.. 32 api     ִ 
	ICONINFO ü,    Ǿֽϴ. 
	
	typedef struct _ICONINFO { 
	   BOOL    fIcon; 
	   DWORD   xHotspot; 
	   DWORD   yHotspot; 
	   HBITMAP hbmMask; 
	   HBITMAP hbmColor; 
	} ICONINFO; 
	
	ù° ʵ ficon,  Ŀ Ǻϴ ƮԴϴ. 
	 true϶ . false̸ Ŀ. 
	ι°, ° տ  ֽ x, y ǥԴϴ. 
	  ⺻ Ŀ ȭǥ Ŀó, ֽ    , 
	ֽ 0, 0 ǰ? (    õǰ, ׻  ߾ 
	ֽ ˴ϴ) 
	  ʵ hbmMask hbmColor  and ũ xor ũԴϴ. 
	
	ü ̴ٽý,  ߿  ΰ ũ Ʈ  
	Դϴ. and ũ () ̹̹Ƿ Ʈ  Ŀ 
	Monochrome Ӽ true ־ մϴ.  ܿ, ׸  ׷ָ 
	Ǳ. 
	
	ھ.. ״ ߿ .. ̷  üκ   
	ü( ڵ, HICON)  Դϴ. HICON ڵ   
	 ̰  TIcon ü Ҵؼ   뵵   
	ֽϴ. 
	  ִ  api Լ CreateIconIndirect() Դϴ.  Լ ڷ 
	 ü ּҸ Ѱָ HICON Ѿ. 
	
	ھ.. ׷   ҽ Ǳ..? 
	( ҽ.. ŸԵ ּҰ  ȳµ..  Ȩ.. 
	  ҽԴϴ.  ø ƽð.. ʹ ģ ּ, 
	  ַ ξ  (?)ϴ.. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    // Get the icon size 
	    int IconSizeX = GetSystemMetrics(SM_CXICON); 
	    int IconSizeY = GetSystemMetrics(SM_CYICON); 
	
	    // Create the "And" mask 
	    Graphics::TBitmap * AndMask = new Graphics::TBitmap; 
	    AndMask->Monochrome = true; 
	    AndMask->Width = IconSizeX; 
	    AndMask->Height = IconSizeY; 
	    // Draw on the "And" mask 
	    AndMask->Canvas->Brush->Color = clWhite; 
	    AndMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY)); 
	    AndMask->Canvas->Brush->Color = clBlack; 
	    AndMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); 
	
	    // Draw as a test 
	    Form1->Canvas->Draw(IconSizeX * 2, IconSizeY, AndMask); 
	
	    // Create the "XOr" mask 
	    Graphics::TBitmap * XOrMask = new Graphics::TBitmap; 
	    XOrMask->Width = IconSizeX; 
	    XOrMask->Height = IconSizeY; 
	    // Draw on the "XOr" mask 
	    XOrMask->Canvas->Brush->Color = clBlack; 
	    XOrMask->Canvas->FillRect(Rect(0, 0, IconSizeX, IconSizeY)); 
	    XOrMask->Canvas->Pen->Color = clRed; 
	    XOrMask->Canvas->Brush->Color = clRed; 
	    XOrMask->Canvas->Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); 
	
	    // Draw as a test 
	    Form1->Canvas->Draw(IconSizeX * 4, IconSizeY, XOrMask); 
	
	    // Create a icon 
	    TIcon * Icon = new TIcon; 
	    TIconInfo IconInfo; 
	    IconInfo.fIcon = true; 
	    IconInfo.xHotspot = 0; 
	    IconInfo.yHotspot = 0; 
	    IconInfo.hbmMask = AndMask->Handle; 
	    IconInfo.hbmColor = XOrMask->Handle; 
	    Icon->Handle = CreateIconIndirect(&IconInfo); 
	
	    // Destroy the temporary bitmaps 
	    delete AndMask; 
	    delete XOrMask; 
	
	    // Draw as a test 
	    Form1->Canvas->Draw(IconSizeX * 6, IconSizeY, Icon); 
	
	    // Assign the application icon 
	    Application->Icon = Icon; 
	
	    // Force a repaint 
	    InvalidateRect(Application->Handle, NULL, true); 
	
	    // Free the icon 
	    delete Icon; 
	} 
	
	 ,  Ȱ ˱⽱ ߰߰  ũ Ҷ 
	ȭ鿡 ׷־  ˱ ٰ.. 
	ģ  Ʈ ξ(~~ 𿴴  ȳ~~~) ּ 
	޾Ƴż..    ϴٸ.. ^^ 
	
	 帮ڸ, GetSystemMetrics() ý    
	 ˷ִ api Լμ, ڿ  콺 ν γ, ư , 
	޴ Ÿ üũũ ũ   ˾Ƴ  ֽϴ. 
	⿡ SM_CXICON  SM_CYICON ڷ Ѱָ ýۿ   
	/ ũ⸦ ݴϴ. 
	(Ʈ 32x32̱ , ̰ 氡ϴ     ƽǰ̴ϴ.) 
	
	.. ״㿣    . 
	 ̷  TIcon Ϸ Ͻ÷,  TIcon::SaveToFile() ޼ҵ 
	 ϸ ǰ? 
	
	  Դϴ. ..  ̺귯 (.icl) 
	Ϸ? 
	 ѹ   .. icl   ҽ   ִ 
	׳ ܼ 16Ʈ dll Դϴ. .. ϰ  ʿ , 
	dll Ӹ  α׷ ҽ ԽѼ  ִٰ ߿ 
	TFileStream Ӹ  , ״ TIcon::SaveToStream() ޼ҵ带 
	Ἥ  ܵ ϰ..  dll   Ŭϸ 
	ǰ? ^^ 
	
	.. ε... 
	 ÷  (?) α׷  Ϳϴ. (92~93) 
	̾ ÷δ  ȹ    ־µ.. 
	ҿ   Ʈ Ǳ⵵ ߾... (ڶӴ... ^^) 
	 μ   ͺ  ߴٰ ں..һ . ^^;;; 
	б Ÿϴ  Ű ȽἭ  Ǿ.. T.T 
	ϵ   Ǿ ..  ȹؿԴ ٸ  ̵ 
	Բ, Ͷ    ̶ϴ.. 

 
43  /  ! ޽ vcl óǴ 
	ϴ.. 
	, ~ ߴ  װ ߰ߵǴ ٶ,  ٻڴϴ. 
	׷.. Ÿ(Ÿ??) غ ص,   ͵ .. 
	׷ ĥ.. .. ..  ÷ȴ 亯  ϴ 
	ܾ ,   οϷ .. ô. 
	
	  :[]Dispatch() Լ Ͽ.... 
	:Ǵ  (Ѳ)    1999-01-03 23:37  ȸ:6  1/1 
	 
	Dispatch() Լ  ϴ ڼ ˰ ͽϴ. 
	  ޼ ʿ  ϰ ִٴ   
	 Ҵٰ ұ..... 
	 Լ  ۿ ϴ ׸  ̵ؼ 
	 ˰ ͽϴ. 
	˰ ô   亯 ֽø ϰڽϴ. 
	 21  ̿սô  C++ Builder ¶ 
	輳   ǰ  ƽϴ.... 
	  ǰ   츮 ûԿ  븸 
	  ּ.. 
	׷ ؾ Builder ¶   ǰŵ... 
	ʾ    غ  .. 
	
	Ѳ 
	
	
	
	
	 
	  :[亯] Dispatch() Լ Ͽ.... 
	:  (cbuilder)    1999-01-04 15:46  ȸ:19  1/5 
	 
	縮׸Դϴ. 
	
	 ޽ óǴ  ñ Dispatch() ԼԴϴ. 
	   ִ WndProc()   Dispatch() Լ 
	ȣմϴ. 
	׷ϱ Ʈ ޽ ó  ƾ  Dispatch() Լ  ִ 
	Դϴ. 
	׸ 翬 Ӱ迡  Ŭ   ޽ ؼ 
	Ŭ Dispatch() ȣϿ ó (?)ϴ  Ǿֽϴ. 
	
	޽ ʰ Dispatch()   谡 . 
	sysdefs.h мغø, ޽  ũε μ  
	 ϴ. 
	
	#define BEGIN_MESSAGE_MAP   virtual void __fastcall Dispatch(void *Message) \ 
	       {                                           \ 
	         switch  (((PMessage)Message)->Msg)        \ 
	         { 
	
	#define VCL_MESSAGE_HANDLER(msg,type,meth)          \ 
	         case    msg:                              \ 
	           meth(*((type *)Message));               \ 
	           break; 
	
	#define END_MESSAGE_MAP(base)           default:    \ 
	    base::Dispatch(Message);    \ 
	                       break;                      \ 
	         }                                         \ 
	       } 
	
	μ   ݹ   ȿ  Ƽ 
	  ... 
	
	BEGIN_MESSAGE_MAP 
	  MESSAGE_HANDLER(WM_CHAR, TWmChar, WmChar) 
	END_MESSAGE_MAP(TForm) 
	
	̿  ڵ, μ ġ    ڵ Ȯ˴ϴ. 
	
	virtual void __fastcall Dispatch(void *Message) 
	{ 
	   switch  (Message->Msg) 
	   { 
	       case WM_CHAR: 
	       WmChar(*((TWmChar *)WM_CHAR)); 
	       break; 
	
	       default: 
	       TForm::Dispatch(Message); 
	       break; 
	   } 
	} 
	
	ٽ ڸ, ޽ ۼѴٴ ü, ̽Ŭ Disaptch() 
	Լ ̵ ϴ  Ǵ Դϴ. 
	׸,  Ŭ   ޽ ؼ default: ̺ 
	 ̽Ŭ Dispatch() Ѱְ ˴ϴ. 
	̷ Ŀú μ, ش ޽  case  ã ó ɶ 
	 ̽Ŭ 鼭 ڵ鸵 ƾ ã Ǵ Դϴ. 
	vcl(Ƹ ٸ  Ŭ ̺귯   ) 
	޽ óϴ  ̿Ͱ  մ  Ǿִϴ. 
	
	׷ Ͻñ... 
	
	
	 縮׸ϴ. 
	
	
	
	----------------------------------------------------------------------------- 
	
	, WndProc() Լ,  Dispatch() Լ ȣϰ ȴٰ ߴµ.. 
	Ȯ  ҽ ﳪ , vcl ҽ  WndProc Լ 
	ٵ ãƺ,   ó  ޽ case ó , 
	  ̽Ŭ Dispatch() Լ ðܹ    ֽϴ. 
	
	޽,   ƴ϶,   徾 ߰,  
	־󾾿   ޽ó  ϰ ֽϴ. 
	(־ ޽ ǰ  ٸϴ.) 
	
	׷, ϼ. 
	..  հ ŷ Ÿ .. ... 
	 ּ, ~ ^^;;;;
 
 
 
44  /  !  α׷ ϱ
	 ۵   α׷ ϱ ؼ, ũ   ֽϴ.
	
	 ô ... Window 3.1 ϴ . 
	Win.ini Run= α׷ н ߰ϴ . ..  Ƽ? ^^ 
	
	״,   , ׷ ڰ ˱  .. 
	α׷   ٳ  ְ? 
	 ϴ     Ǿ ֱ. ٶ. 
	
	  , Ʈ ϴ Դϴ. 
	  Ǵ  'ų' α׷   . 
	
	Ʈ  α׷ ϴ , Ʈ   Ű 
	ٰ ϴ ġ ˸     ִ .. 
	α׷ ϱ  ġ  ϴ. 
	HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 
	,  ų  ƴ϶,   ٷ  ö  ѹ 
	 α׷̶,  ġ ϸ ˴ϴ. 
	HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce 
	? ׷ ҽ ô. , ġ ˸  . 
	
	#include <registry.hpp> 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    TRegistry *reg = new TRegistry; 
	    reg->RootKey = HKEY_LOCAL_MACHINE; 
	    reg->LazyWrite = false; 
	    reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false); 
	    reg->WriteString("My App", Application->ExeName); 
	    reg->CloseKey(); 
	    delete reg; 
	} 
	
	 ƴմϴٸ..  ҽ Ŀ Ŷϴ. 
	,  ۼ ؼ Ŀ  ƴϱ.  ܾٳ ؽƮ ߿ ֱ淡 
	÷ýϴ.  , Ƹ   FAQ ܾ  ׿. 
	
	׷ ǽñ... 
 
 
45  /  ! ̾α׸ ۾ǥٿ ֱ(?)
	ϴ.. ..   .. 
	ó ϰ  ø ص, ´ ϳ ø .. 
	 ½ ䷷  Ƽ.. ... ^^ 
	
	..   ̻? Ϲ ̾α׸ , ׷ϱ ⼭ 
	̾α׶  ƴ   ŵϴ.. ȥ ñ.. 
	·, Ϲ exe ø̼ǿ   ƴ   
	ShowModal() ޼ҵ ȭ鿡 ̸,  ۾ǥٿ Ÿ . 
	(̷ Ʈδ ۾ǥٿ Ÿ ʴ ̾α׸ ۾ǥٿ 
	Ÿ ϴ   ÷Ⱦϴ.. ʿϽ  subj ˻غ.) 
	
	׷..  δ, ocx  Ʈѿ ԽŲ vcl  ٸ 
	ó  ʾƵ ⺻ ۾ǥٿ Ÿϴ. 
	ٽ ؼ, ȣƮ ø̼ ü ۾ǥ ׸ ܿ, ocx ԽŲ 
	 ۾ǥٿ Ƣ´ . ̷ ȿ ϼ̴ ̶ .. 
	 ̷    ϴ. ... ShowModal() ޼ҵ ȭ鿡 
	Ÿ ε ұϰ, ۾ǥ   ø̼ ׸ Ŭϸ 
	ȲϰԵ  ø̼ 찡 Ȱȭ˴ϴ! ( Է Ŀ  
	ʽϴ.) 
	
	̰ α׷ӿԴ  ƴҼ ְ.. ڿԴ  ȥ 
	  ְ. ޷   ̽  ̴ϴ.. T.T 
	 DLL Ʈ ۾   ʾƼ غ ϴٸ, Ƹ 
	DLL ԽŲ      ˴ϴ.  DLL 
	OCX  μ   (in-proc server) ߴ  
	ֱ մϴٸ. 
	
	׸.. ȸ翡  ڸ   δ, ̴ٽ ۾߿ ׷ 
	  ִٰ ϴ. Ͽư.. ɰ  ƴ϶ ϴ 
	ݺ Ÿ  ¥  ̰? ^^ 
	
	..  ʹ .  ع ãƺô. 
	׳  غ... ø̼ ׸ ۾ǥٿ Ÿ ʰ ϴ 
	Ϲ  ϸ  .. ϴ   ϰ Ǵµ, 
	غ  ȵǴ. . 
	( OnShow ̺Ʈ ڵ鷯, ShowWindow(Application->Handle, SW_HIDE); 
	ϸ ˴ϴ.  Ϲ exe ø̼ .) 
	
	׷.. ܸӸ  ýϴ.  ÷ȴ , ⺻δ 
	۾ǥٿ Ÿ   ̾α ׸ ۾ǥٿ  ߾? 
	 ̵ ݴ Ȱغýϴ. 
	
	ϽǸ 𸣰ڽϴٸ,   CreateParams()  ̵ؼ, 
	apiԼ CreateWindow(Ȥ ...Ex) Ѱ  ŸϿ ExAppWindow 
	߰ϰ,   оƮ ũž  ν 
	۾ǥٿ  Ÿ ߾ϴ. 
	
	  ߿ ,  оƮ ϴ . 
	ݴ ۾ǥٿ ,  оƮ   ־ָ 
	ذ  ƴϰڽϱ? ^^ 
	
	׷, ⼭ ణ  ֽϴ. ocx ۼ Ƽ( ַ 
	 ̿ؼ ۾մϴ) Ϲ vcl  ޸,  ü Ͱ 
	巯 . (翬?) ׷ϱ ̸->Handle  Ҽ ٴ . 
	
	׷..   , Ϲ ع غô. 
	 ü Ͱ   ڵ ãƳ? api Լ FindWindow() 
	 . . . 
	
	׷.. ϼ ҽ  ϴ. 
	void __fastcall TForm1::CreateParams(TCreateParams &Params) 
	{ 
	    TForm::CreateParams(Params); 
	    Params.WndParent = FindWindow("TMainForm", NULL); 
	} 
	
	⼭ ȣƮ ø̼ Ŭ ̸ ϰ ĸ  
	ʾ. ĸ 츦 ã°..  ŷڵ . 
	
	·..   ˴ϴ.   ⿴ ̾α ۾ǥ 
	׸ ϰ ȴϴ. 
	
	ھ..  Դϴ. ణ οڸ, ̷  ڵ Ϸ 
	翬  api   ذ ʼԴϴ. 
	(CreateParams() CreateWindowEx() api Լ Ѱ   Ư¡ 
	  ֵ  ԼԴϴ.) 
	
	׷.. ̸. ^^ 



46  /  ! Rx 2.6 4 ġϱ
	ð   ̰Ǹ.. ̰   ƴմϴ. 
	 ޸  µ,   ÷̴ּ  ״ øϴ. 
	(ȷ... ^^;;;) 
	
	---------------------------------------------------------------------------- 
	  ȣ : 20 
	Խ : 輱   (proware ) 
	 : 1999-04-02 16:57 
	   : [TIP] C++4 RX Lib 2.60 ġϱ 
	
	RX Lib component ƽ? 
	
	  ƮԴϴ. 
	
	ٵ  C++4  .. ׷쿡  ö־ 
	⿡ Űϴ. 
	
	------------------------------- 
	1.  ġǾִ Ʈ . 
	2. ٽ νѴ. 
	3. Text Editor ̿ؼ Rx.inc ȭ  κп Ʒ  ߰Ѵ. 
	
	{$IFDEF VER125}{Borland C++ Builder 4.0 } 
	{$DEFINE CBUILDER} 
	{$ObjExportAll On} 
	{$UNDEF DCS} 
	{$UNDEF RX_MIDAS} 
	{$ENDIF} 
	
	4.   Rx.inc   κп ħǥ Ѵ. 
	('Gauges.obj Bot found' error ش.) 
	
	{$IFDEF WIN32} 
	{.$DEFINE USE_PROGRESSBAR} // <-  Ǿտ ִ ħǥ !!! 
	... 
	
	5.   Rxconst.pas Ͽ  ߰Ѵ. 
	
	{$IFDEF VER125} 
	const 
	SDelphiKey = 'Software\Borland\C++Builder\4.0'; 
	{$ENDIF} 
	
	6.    ϵ 뿡 '35' '40' replaceѴ. 
	
	-> dclrxctl.bpk , dclrxctl.cpp , dclrxdb.bpk ,dclrxdb.cpp 
	   rxctl.bpk , rxctl.cpp , rxdb.bpk , rxdb.cpp 
	
	7.   rxctl.bpk , rxdb.bpk , dclrxctl.bpk , dclrxdb.bpk 
	 ҷͼ Install ư . 
	( ** Install ϱ Option Linker  Dynamic RTL 
	׸ UnCheckѴ.) 
	
	8.  ͸ ϸ鼭.... ٸ.. OK...!!! 
	
	----------------------------------------------------------- 
	
	 Űٰ  
	
	ݸ ϰԵǾ׿.. Ǿƴϰ  帳ϴ. 
	
	Ȥ  ۷ ص ȵǽø 
	
	 ٽ ÷ּ. ׷ ƿ   ڷǿ ø 
	
	ϰڽϴ. ׷...*^^* 
	
	**---------------------------------- 
	± : kims510@proware.co.kr 
	
	
	============================================================================= 
	
	ٽ .. Դϴ. 
	۽..       ãƼ ϴ ̶󼭿. 
	   ϵ ڷǿ ÷ڽϴ. 
	 ٷ  ø ڷǿ ϵǾ̴ϴ. 
	״ ޾Ƽ  rx 丮 ø ˴ϴ. 
	׷ ̸... 
 
 
47  /  ! Ÿӿ Ʈ ϱ
	.. Ʒ Ŀ? ܾ?  ø .. ʹ ȷ. 
	ߵ  ǻ츱   .. ϰ  غٰ.. 
	
	   ҽ߿,    ׷ ִ  
	ϳ ãƼ øϴ.   ѹ ϱ ߽ϴٸ(1457), 
	巡븸 ϰ  ؼ  ʾҰŵ. ^^;;;; 
	
	ھ.. ׷ ⸦ Ǯ. 
	 ޽ WM_SYSCOMMAND ޽ ,  ü ۿ  
	ɵ ϴ ޽    ֽϴ. ݱ, ũ,   
	  ޽ ɼ(WPARAM ) ؼ ̷ϴ. 
	
	׷,   ޽ win32 api ۷    
	ɼ  ֽϴ.  ϳ     ߴ 
	Ÿ 巡.. 0xf12. ׿ܿ  ɼ  . 
	
	  ɼ  츦 ʰ / Ʒ / ʰ / ʰ 
	/ ʳ / ʳ / Ʒʳ / Ʒʳ /   ⿡ 
	Ŭϰ 巡 WM_SYSCOMMAND ޽ ߻ϸ鼭 WPARAM Ѿ 
	Դϴ. 
	
	ٽ ϸ,  ڵ  Ʈ̶    ɼ 
	ؼ Ÿӿ 巡    ִٴ  . 
	
	  ð ..  ذ ȵǽô ,  ©  ѹ 
	 оõ, Ʒ ҽ оð  غñ ٶϴ. 
	
	 Ǵ    ϱ ϴϱ ũη غô. 
	
	#define SC_DRAG_RESIZEL  0xf001  // left resize 
	#define SC_DRAG_RESIZER  0xf002  // right resize 
	#define SC_DRAG_RESIZEU  0xf003  // upper resize 
	#define SC_DRAG_RESIZEUL 0xf004  // upper-left resize 
	#define SC_DRAG_RESIZEUR 0xf005  // upper-right resize 
	#define SC_DRAG_RESIZED  0xf006  // down resize 
	#define SC_DRAG_RESIZEDL 0xf007  // down-left resize 
	#define SC_DRAG_RESIZEDR 0xf008  // down-right resize 
	#define SC_DRAG_MOVE     0xf012  // move 
	
	ϴ±迡,  ߴ 巡 ȼ 0xf012 Բ ߽ϴ. 
	
	״㿡..  г ϳ , г OnMouseMove ̺Ʈ ڵ鷯 ۼմϴ. 
	
	void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift, 
	      int X, int Y) 
	{ 
	    TControl *SenderControl = dynamic_cast<TControl *>(Sender); 
	    if((X < 4 && Y < 4) :: (X > SenderControl->Width-4 && Y > SenderControl-> 
	      Height-4)) 
	        SenderControl->Cursor = crSizeNWSE; 
	    else if((X < 4 && Y > SenderControl->Height-4) :: (X > SenderControl-> 
	      Width-4 && Y < 4)) 
	        SenderControl->Cursor = crSizeNESW; 
	    else if(X < 4 :: X > SenderControl->Width-4) 
	        SenderControl->Cursor = crSizeWE; 
	    else if(Y < 4 :: Y > SenderControl->Height-4) 
	        SenderControl->Cursor = crSizeNS; 
	    else 
	        SenderControl->Cursor = crDefault; 
	} 
	
	 ̺Ʈ ڵ鷯, ܼ Ŀ ġ  Ŀ縸  Ȳ ´ 
	 Ŀ ٲپذű. 
	߿  Ʒ κԴϴ. 
	̹,  г OnMouseDown ̺Ʈ ڵ鷯 ۼմϴ. 
	
	void __fastcall TForm1::Panel1MouseDown(TObject *Sender, 
	      TMouseButton Button, TShiftState Shift, int X, int Y) 
	{ 
	    TControl *SenderControl = dynamic_cast<TControl *>(Sender); 
	    int SysCommWparam; 
	
	    if(X < 4 && Y < 4) 
	        SysCommWparam = SC_DRAG_RESIZEUL; 
	    else if(X > SenderControl->Width-4 && Y > SenderControl->Height-4) 
	        SysCommWparam = SC_DRAG_RESIZEDR; 
	    else if(X < 4 && Y > SenderControl->Height-4) 
	        SysCommWparam = SC_DRAG_RESIZEDL; 
	    else if(X > SenderControl->Width-4 && Y < 4) 
	        SysCommWparam = SC_DRAG_RESIZEUR; 
	    else if(X < 4) 
	        SysCommWparam = SC_DRAG_RESIZEL; 
	    else if(X > SenderControl->Width-4) 
	        SysCommWparam = SC_DRAG_RESIZER; 
	    else if(Y < 4) 
	        SysCommWparam = SC_DRAG_RESIZEU; 
	    else if(Y > SenderControl->Height-4) 
	        SysCommWparam = SC_DRAG_RESIZED; 
	    else 
	        SysCommWparam = SC_DRAG_MOVE; 
	
	    ReleaseCapture(); 
	    SendMessage(Panel1->Handle, WM_SYSCOMMAND, SysCommWparam, 0); 
	} 
	
	ReleaseCapture()Լ        ߾ 
	ϴ. ñϽ  Ͻñ. 
	
	 ҽ  غ.. űϰԵ,   г, ġ 
	 ó 巡   ƴ϶, ٱ 踦 巡ؼ  
	  ֽϴ.
	
54  /  [  ]  α׷  Ȯϱ..
	 ʺе( ؼ)  α׷ Ҷ, 
	 Ȯϰ ;Ͻʴϴ. 
	    ݹ Դٰ ? 
	̰ Ȼ ϱؼ âٿ Ű  
	..   δ α׷ ǳ 
	ѹ Է¹޴ Լ ִ  ֽϴ. 
	׷,,   return 0;κп 극ũ Ʈ 
	ɾΰ Ͻʽÿ. 
	׷ ׺κп ó ä   ֽϴ. 
	..   Żϼ̳? 
	..   쿬 ߽߰ϴ. 
	...   ÷ ˼մϴ.

 
59  /  쿡 printf 䳻
	 α׷ ¥鼭  ¥ κ printf    ٴ ̴. 
	printf  ǥ ȭ   ... 
	׷ Memo  Ҷ IntToStr , StrToInt   ߵȴ. 
	 sprintf   Dos  printf    ڸ     
	 ޸    ִ. 
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	  int i; 
	  float f=0.1; 
	  char* ch = "abcde"; 
	  char cha = 0x03; 
	  char sbuff[200]; 
	
	  for (i=0; i<20; i++) 
	  { 
	    sprintf(sbuff,"%d ,%x, %p, %f, %c ,%s ",i,i,&i,f*i,cha,ch); 
	    Memo1->Lines->Add(sbuff); 
	  } 
	
	} 
	
	Ǵ 
	  AnsiString astTest; 
	
	  for (i=0; i<20; i++) 
	  { 
	    astTest.sprintf("%d ,%x, %p, %f, %c ,%s ",i,i,&i,f*i,cha,ch); 
	    Memo1->Lines->Add(astTest); 
	  } 
	
	  Ͱ ص ȴ.  ٸ C program  ȣȯ   Ansistring  Method 
	  °   ...

 
60  /   Easter Eggs (Ȱް)
	 ִ° Ƽ..øϴ. 
	Ʒ  www.dephiKorea.com  Խϴ. 
	
	̰ ̿ ִ  ƴϰ  ֽϴ. 
	ABOUTâ ALTŰ ¿ 
	  TEAM 
	  DEVELOPERS 
	  QUALITY 
	  GUNGLA 
	 Էغ.. 
	 4,5 ε˴ϴ. 
	 4 
	  TEAM 
	  DEVELOPERS 
	  QUALITY 
	  CHUCK Դϴ.  



61  /  ڽ ǻ ̸ ˾Ƴ
	 ڸƿ ۿԽ.. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	  { 
	      DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; 
	      char szBuf[MAX_COMPUTERNAME_LENGTH + 1]; 
	      szBuf[0] = '\0'; 
	
	      GetComputerName(szBuf, &dwSize); 
	
	      Label1->Caption = szBuf; 
	  } 

 
62  /  [Tip]   !
	  ؼ Form Create ̺Ʈ ڵ鷯   ڵϽø ˴ϴ... 
	
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	    Brush->Style = bsClear; 
	} 
	
	׸   巡 ϰų ٸ    巡 Ű 
	
	  ȭ ų() ٸ    ϴ(). 
	
	̸ ذϱ Form Createÿ ȣǴ CreateParams ޼ҵ(TCustomForm::CreateParams) 
	
	̵(override) Ͻø ˴ϴ... 
	
	 ̿... 
	
	void __fastcall TForm1::CreateParams(TCreateParams &Params) 
	{ 
	    TForm::CreateParams(Params); 
	    Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT; 
	} 
	
	
	..׸ 翬 CreateParams ޼ҵ (.h)  ּž ϱ...^^;;



65  /  builder  MDI Child Form DLL  ...
	Dll ȭ  
	
	//--------------------------------------------------------------------------- 
	
	#include <vcl.h> 
	#include <windows.h> 
	#include "Unit2.h" 
	#pragma hdrstop 
	
	TApplication* DllApp = 0; 
	//--------------------------------------------------------------------------- 
	//   Important note about DLL memory management when your DLL uses the 
	//   static version of the RunTime Library: 
	// 
	//   If your DLL exports any functions that pass String objects (or structs/ 
	//   classes containing nested Strings) as parameter or function results, 
	//   you will need to add the library MEMMGR.LIB to both the DLL project and 
	//   any other projects that use the DLL.  You will also need to use MEMMGR.LIB 
	//   if any other projects which use the DLL will be performing new or delete 
	//   operations on any non-TObject-derived classes which are exported from the 
	//   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling 
	//   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases, 
	//   the file BORLNDMM.DLL should be deployed along with your DLL. 
	// 
	//   To avoid using BORLNDMM.DLL, pass string information using "char *" or 
	//   ShortString parameters. 
	// 
	//   If your DLL uses the dynamic version of the RTL, you do not need to 
	//   explicitly add MEMMGR.LIB as this will be done implicitly for you 
	//--------------------------------------------------------------------------- 
	
	#pragma argsused 
	
	int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) 
	{ 
	    return 1; 
	} 
	//--------------------------------------------------------------------------- 
	
	extern "C" __declspec(dllexport) void __stdcall CreateChild(TApplication *App) 
	{ 
	    if (!DllApp) 
	    { 
	        DllApp = Application; 
	        Application = App; 
	    } 
	
	    TForm2 *child = new TForm2(Application->MainForm); 
	    child->Show(); 
	} 
	
	extern "C" __declspec(dllexport) void __stdcall ResetDllApp() 
	{ 
	    if (DllApp) 
	    { 
	        Application = DllApp; 
	    } 
	} 
	
	
	Dll ȿ  ִ From ҽ 
	
	//--------------------------------------------------------------------------- 
	
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "Unit2.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	#pragma resource "*.dfm" 
	TForm2 *Form2; 
	//--------------------------------------------------------------------------- 
	__fastcall TForm2::TForm2(TComponent* Owner) 
	    : TForm(Owner) 
	{ 
	} 
	//--------------------------------------------------------------------------- 
	
	void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) 
	{ 
	    Action = caFree;     
	} 
	//--------------------------------------------------------------------------- 
	
	
	
	Dll ҷ ̴ Form ( MDI Parent ǰ) 
	
	//--------------------------------------------------------------------------- 
	
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "Unit21.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	#pragma resource "*.dfm" 
	TForm1 *Form1; 
	void (__stdcall *CreateChild)(TApplication *); 
	void (__stdcall *ResetDllApp)(); 
	//--------------------------------------------------------------------------- 
	__fastcall TForm1::TForm1(TComponent* Owner) 
	    : TForm(Owner) 
	{ 
	} 
	//--------------------------------------------------------------------------- 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	    HINSTANCE DllInstance; 
	    DllInstance = LoadLibrary("Project1.dll"); 
	    CreateChild = (void(__stdcall *)(TApplication *))GetProcAddress(DllInstance, "CreateChild"); 
	
	    CreateChild(Application); 
	} 
	//--------------------------------------------------------------------------- 
	
	void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) 
	{ 
	    HINSTANCE DllInstance; 
	    DllInstance = LoadLibrary("Project1.dll"); 
	    ResetDllApp = (void(__stdcall *)(void))GetProcAddress(DllInstance, "ResetDllApp"); 
	    ResetDllApp(); 
	} 
	//--------------------------------------------------------------------------- 
	
	 뿡  ִ° ... 
	
	 3ֵ ؼ  ҽԴϴ. 
	
	
	  Ǿ մϴ. ׷......

 
66  /    Ʈ ޽ óϱ
	 ÷ȴٰ    ޽ óϰ ۼغ ҽԴϴ. 
	
	  մϴ. 
	
	 Ʈ ش ޽ ó⸦ ϴ Դϴ. 
	
	TListView --| () 
	            | 
	            v 
	        HandlerSet 
	
	 Q&A  亯Ͻ  GetWindowLong, SetWindowLong ⺻ 
	
	޽ ڵ鷯 ٲ㼭 óϴ Դϴ.(--;  ...   ...) 
	
	 Ʈκ WM_xxx ޽ ߻. --> HandlerSet::WndProc(HWND hWnd, ....) --> 
	
	--> ش HandlerSet ã --> (ش ޽ڵ鷯 ϵ : ش ڵ鷯) 
	                             --> (  Ͻ:  óԼ(WndProc)) 
	
	
	ٵ  Ѱ ... Class Explorer ؼ ޽ ڵ鷯 ϸ... ڵ 
	
	ش ޽ ڵ鷯 Ҹ...     ޽ڵ鷯(Լ) 
	
	Ʈ ڵ鷯   մϴ.  ũƮ   ٵ.. ^^; 
	
	  ... װ ... 
	
	ư C++Builder 
	     BEGIN_MESSAGE_MAP 
	         VCL_MESSAGE_HANDLER(WM_DROPFILES, TMessage, WMDropFiles) 
	     END_MESSAGE_MAP(TListView) 
	
	ڵ ϴ ſ...   
	    aHandlerSet.RegisterMessage(WM_DROPFILE, WMDropFiles) 
	   մϴ.. 
	
	Ʒ ڵԴϴ. 
	/* 
	Message Handler prototype : 
	typedef void __fastcall (__closure *FnEventHandler) 
	(System::TObject* Sender, TMessage &msg); 
	
	RegisterHandlerSet( HandlerSet *); ο ޽ ڵ鷯 . 
	UnRegisterHandlerSet( HandlerSet *pHS); ⺻ ޽ ڵ鷯 . 
	
	HandlerSet(TWinControl *widget); ޽ó  . 
	    SetWidget(TWinControl *widget); 
	
	    RegisterMessage(Cardinal msgID, FnEventHandler handler); 
	     msgID:  ޽. 
	        handler: ڵ鷯 ޼ҵ. 
	UnRegisterMessage(Cardinal msgID); 
	void UnRegisterMessageAll(Cardinal msgID); 
	
	
	*/ 
	
	<b>HandlerSet.h</b> 
	//--------------------------------------------------------------------------- 
	#ifndef HandlerSetH 
	#define HandlerSetH 
	#include <vcl.h> 
	#include <map> 
	
	typedef void __fastcall (__closure *FnEventHandler) 
	(System::TObject* Sender, TMessage &msg); 
	
	class HandlerSet 
	{ 
	public: 
	static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 
	static void __fastcall RegisterHandlerSet  ( HandlerSet *pHS); 
	static void __fastcall UnRegisterHandlerSet( HandlerSet *pHS); 
	
	public: 
	HandlerSet(TWinControl *widget); 
	virtual ~HandlerSet(); 
	
	void RegisterMessage(Cardinal msgID, FnEventHandler handler); 
	void UnRegisterMessage(Cardinal msgID); 
	void UnRegisterMessageAll(Cardinal msgID); 
	
	void SetWidget(TWinControl *widget); 
	TWinControl * GetWidget() { return FWidget;} 
	
	protected: 
	typedef std::map<Cardinal, FnEventHandler> WndProcMap; 
	    TWinControl  *FWidget; 
	    WNDPROC FOrgWndProc; 
	    WndProcMap _WndProcMap; 
	
	protected: 
	typedef std::map<HWND, HandlerSet*> HandlerSetMap; 
	static HandlerSetMap _HandlerSetMap; 
	}; 
	//--------------------------------------------------------------------------- 
	#endif 
	
	<b>HandlerSet.cpp</b> 
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "HandlerSet.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	
	std::map<HWND, HandlerSet*> HandlerSet::_HandlerSetMap; 
	
	////////////////////////////////////////////////////////////////////// 
	// Widget WndProc Method 
	LRESULT CALLBACK HandlerSet::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
	{ 
	HandlerSet *pSet = _HandlerSetMap[hWnd]; 
	    if( !pSet ) 
	    { 
	     AnsiString msg("NULL HandlerSet of "); 
	        msg.sprintf("%p", hWnd); 
	     throw Exception( msg ); 
	    } 
	
	    WndProcMap::iterator pos = pSet->_WndProcMap.find(uMsg); 
	    if( pos != pSet->_WndProcMap.end() ) { 
	FnEventHandler Handler = pos->second; 
	TMessage msg = { uMsg, }; 
	    msg.WParam = wParam; 
	        msg.LParam = lParam; 
	        Handler(pSet->FWidget, msg); 
	        return 0L; 
	    } 
	
	    return pSet->FOrgWndProc(hWnd, uMsg, wParam, lParam); 
	} 
	
	////////////////////////////////////////////////////////////////////// 
	// [Un]Register HandlerSet 
	void __fastcall HandlerSet::RegisterHandlerSet( HandlerSet *pHS) 
	{ 
	if( !pHS) return ; 
	HandlerSetMap::iterator pos = _HandlerSetMap.find(pHS->FWidget->Handle); 
	    if( pos != _HandlerSetMap.end() ) 
	    { 
	return ; //already registered.. 
	    } 
	_HandlerSetMap[pHS->FWidget->Handle] = pHS; 
	    pHS->FOrgWndProc = (WNDPROC)::GetWindowLong(pHS->FWidget->Handle, GWL_WNDPROC); 
	    ::SetWindowLong(pHS->FWidget->Handle, GWL_WNDPROC, (LONG)WndProc); 
	} 
	void __fastcall HandlerSet::UnRegisterHandlerSet( HandlerSet *pHS) 
	{ 
	if( !pHS ) return ; 
	HandlerSetMap::iterator pos = _HandlerSetMap.find(pHS->FWidget->Handle); 
	    if( pos == _HandlerSetMap.end() ) 
	    { 
	return ; //already unregistered.. 
	    } 
	    ::SetWindowLong(pHS->FWidget->Handle, GWL_WNDPROC, (LONG)pHS->FOrgWndProc); 
	    _HandlerSetMap.erase(pos); 
	    pHS->FOrgWndProc = NULL; 
	} 
	
	////////////////////////////////////////////////////////////////////// 
	// Con/Destructor 
	HandlerSet::HandlerSet(TWinControl *widget) 
	{ 
	    SetWidget(widget); 
	    FOrgWndProc = NULL; 
	} 
	
	HandlerSet::~HandlerSet() 
	{ 
	if( !FOrgWndProc ) return ; 
	   ::SetWindowLong(FWidget->Handle, GWL_WNDPROC, (LONG)FOrgWndProc); 
	} 
	
	////////////////////////////////////////////////////////////////////// 
	// [Un]Register Message 
	void HandlerSet::RegisterMessage(Cardinal msgID, FnEventHandler handler) 
	{ 
	_WndProcMap[msgID] = handler;//Duplicated... 
	} 
	
	void HandlerSet::UnRegisterMessage(Cardinal msgID) 
	{ 
	WndProcMap::iterator pos = _WndProcMap.find(msgID); 
	    if( pos != _WndProcMap.end() ) _WndProcMap.erase(msgID); 
	} 
	void HandlerSet::UnRegisterMessageAll(Cardinal msgID) 
	{ 
	_WndProcMap.clear(); 
	} 
	
	////////////////////////////////////////////////////////////////////// 
	// Interface 
	void HandlerSet::SetWidget(TWinControl *widget) 
	{ 
	FWidget = widget; 
	} 
	
	
	<b><Test Module Ϻ Դϴ.></b> 
	
	HandlerSet *pPanelHandler = NULL; 
	HandlerSet *pEditHandler = NULL; 
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	if( !pPanelHandler ) pPanelHandler = new HandlerSet(Panel1); 
	    if( !pEditHandler ) pEditHandler = new HandlerSet(Edit1); 
	    pPanelHandler->RegisterMessage(WM_DROPFILES, OnDropFiles); 
	    pEditHandler->RegisterMessage(WM_SETFOCUS, OnSetFocus); 
	    pEditHandler->RegisterMessage(WM_KILLFOCUS, OnKillFocus); 
	
	    HandlerSet::RegisterHandlerSet(pPanelHandler); 
	HandlerSet::RegisterHandlerSet(pEditHandler); 
	    Button1->Visible = false; 
	Button2->Visible = true; 
	} 
	void __fastcall TForm1::Button2Click(TObject *Sender) 
	{ 
	    HandlerSet::UnRegisterHandlerSet(pPanelHandler); 
	HandlerSet::UnRegisterHandlerSet(pEditHandler); 
	    delete pPanelHandler; pPanelHandler = NULL; 
	    delete pEditHandler; pEditHandler = NULL; 
	Button1->Visible = true; 
	    Button2->Visible = false; 
	} 
	//--------------------------------------------------------------------------- 
	void __fastcall TForm1::OnDropFiles(TObject * Sender, TMessage & msg) 
	{ 
	TPanel *Pnl = (TPanel*)Sender; 
	
	    char szFile[MAX_PATH+1]; 
	    ::DragQueryFile( (HDROP)msg.WParam, 0, szFile, MAX_PATH); 
	
	    AnsiString sFile(szFile); 
	int iPos = sFile.LastDelimiter( AnsiString("\\") ); 
	
	    Pnl->Caption = "Dropped File: " 
	     + sFile.SubString(iPos+1, sFile.Length()-iPos); 
	} 
	
	void __fastcall TForm1::OnSetFocus(TObject * Sender, TMessage & msg) 
	{ 
	TEdit *pEdt = (TEdit*)Sender; 
	    pEdt->Text = "WM_SETFOCUS"; 
	} 
	
	void __fastcall TForm1::OnKillFocus(TObject * Sender, TMessage & msg) 
	{ 
	TEdit *pEdt = (TEdit*)Sender; 
	    pEdt->Text = "WM_KILLFOCUS"; 
	} 
	//--------------------------------------------------------------------------- 
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	::DragAcceptFiles( Panel1->Handle, true); 
	} 
	//--------------------------------------------------------------------------- 

 
67  /  *.ico  *.bmp  ٲٱ
	speed button  bmp    ֳ׿.. ׷ ֽ  *.ico  ʿ䰡      
	׷ ׷  α׷ ѹ  ýϴ.  ϼ 
	
	Button1Click   ȯؼ ҷΰ̰.. 
	Button2Click  ƿ Directory ü ȯϴ Դϴ. 
	
	void __fastcall TForm1::Button1Click(TObject *Sender) 
	{ 
	  TIcon *Icon; 
	  Graphics::TBitmap *Bitmap; 
	  AnsiString CurrentDir, NewDir, FileName; 
	
	  CurrentDir = GetCurrentDir(); 
	  NewDir = CurrentDir + "\\BMP"; 
	
	
	  Icon = new TIcon; 
	  Bitmap = new Graphics::TBitmap; 
	
	  Icon->LoadFromFile("button.ico"); 
	
	  Bitmap->Width  =  (Icon->Width); 
	  Bitmap->Height =  (Icon->Height); 
	  Bitmap->Canvas -> Draw(0,0,Icon); 
	
	  Bitmap->SaveToFile("button.bmp"); 
	
	  SpeedButton1->Glyph = Bitmap; 
	
	  delete Icon; 
	  delete Bitmap; 
	
	} 
	//--------------------------------------------------------------------------- 
	
	void __fastcall TForm1::Button2Click(TObject *Sender) 
	{ 
	    TIcon *Icon;                         // Icon  ٷ ü  
	    Graphics::TBitmap *Bitmap;           // BitMap  ٷ ü  
	    Icon = new TIcon;                    // Icon ü  
	    Bitmap = new Graphics::TBitmap;      // BitMap ü  
	
	
	    TSearchRec sr;                       // Director   ü 
	    AnsiString CurrentDir, NewDir, FileName,ExtName; 
	    int iAttribute = faAnyFile;          // File -> Directory   
	    int ExtFrom,ExtTo;                   // Ȯ ġ 
	
	    ExtFrom = 0; 
	    ExtTo = 0; 
	
	
	  CurrentDir = GetCurrentDir();          //  directory  ´. 
	  NewDir = CurrentDir + "\\BMP"; 
	  bool ret = CreateDir(NewDir);          //  directory  BMP directory  . 
	
	  CurrentDir += "/*.*";                  //  directory ȭϵ Ѵ. 
	
	  if(FindFirst(CurrentDir,iAttribute,sr) == 0 ) { //  óȭϷ ű 
	    do { 
	      if(sr.Attr != faDirectory) {                // directory  ƴϸ 
	        ExtFrom = sr.Name.LastDelimiter("."); 
	        ExtTo = sr.Name.Length();                   // Ȯڸ ϰ 
	        ExtName = sr.Name.SubString(ExtFrom+1,(ExtTo-ExtFrom)); 
	        FileName = sr.Name.SubString(1,ExtFrom-1); 
	
	        if(ExtName.LowerCase() == "ico") {                     // Ȯ  ico ̸ 
	          iIcoCount ++; 
	          Icon->LoadFromFile(sr.Name);                         // ҷ 
	
	          Memo1->Lines->Add("Load : " + sr.Name); 
	          StatusBar1->Panels->Items[0]->Text = "Load : " + sr.Name; 
	          Bitmap->Width  =  (Icon->Width);         // Bitmap  ׸ 
	          Bitmap->Height =  (Icon->Height); 
	          Bitmap->Canvas -> Draw(0,0,Icon); 
	
	          Bitmap->SaveToFile(NewDir + "\\" + FileName + ".bmp"); // ο directory ٰ  
	
	          Memo1->Lines->Add("Convert Complete : " + FileName + ".bmp"); 
	          StatusBar1->Panels->Items[0]->Text = "Convert Complete : " + FileName + ".bmp"; 
	        } 
	      } 
	    }while(FindNext(sr) == 0 );              // directory    ȭ . 
	
	    Memo1->Lines->Add(""); 
	
	    if(iIcoCount == 0 ) { 
	      Application->MessageBox(" Directory  *.ico  ϴ.", 
	                              "ico ", MB_OK | MB_ICONERROR); 
	    } 
	    else { 
	      Memo1->Lines->Add(IntToStr(iIcoCount) + "   ȯ߽ϴ."); 
	    } 
	    iIcoCount = 0;                           // ȯ  ʱȭ Ѵ. 
	  } 
	
	  FindClose(sr);                             // Directory  resource  
	                                             // Icon  Bitmap ޸𸮿  
	  delete Icon; 
	  delete Bitmap; 
	
	} 
	//---------------------------------------------------------------------------


69  /   Ŭ̾Ʈ  ϱ...
	ٵ ƽô ̰...  Ŭ̾Ʈ  ϴ ҽԴϴ. 
	   ַ   ׿... 
	SetWindowRgn ̿մϴ. 
	
	//--------------------------------------------------------------------------- 
	#include <vcl.h> 
	#pragma hdrstop 
	
	#include "RgnTestUnit.h" 
	//--------------------------------------------------------------------------- 
	#pragma package(smart_init) 
	#pragma resource "*.dfm" 
	TForm1 *Form1; 
	//--------------------------------------------------------------------------- 
	__fastcall TForm1::TForm1(TComponent* Owner) 
	: TForm(Owner) 
	{ 
	} 
	//--------------------------------------------------------------------------- 
	void __fastcall TForm1::FormResize(TObject *Sender) 
	{ 
	SetWindowRgn(); 
	} 
	//--------------------------------------------------------------------------- 
	void TForm1::SetWindowRgn() 
	{ 
	    HRGN hRCompo = NULL; 
	    int IX = GetSystemMetrics(SM_CXSIZEFRAME); 
	    int IY = GetSystemMetrics(SM_CYCAPTION); 
	    IY += GetSystemMetrics(SM_CYSIZEFRAME); 
	
	for(int i = 0; i< ControlCount; i++) { 
	TControl *C = Controls[i]; 
	        if(hRCompo) { 
	        HRGN hR = CreateRectRgn( 
	C->BoundsRect.Left+IX, 
	                C->BoundsRect.Top+IY, 
	             C->BoundsRect.Right+IX, 
	                C->BoundsRect.Bottom+IY); 
	         CombineRgn(hRCompo, hRCompo, hR, RGN_OR); 
	            DeleteObject(hR); 
	        } 
	        else { 
	        hRCompo = CreateRectRgn( 
	C->BoundsRect.Left+IX, 
	                C->BoundsRect.Top+IY, 
	             C->BoundsRect.Right+IX, 
	                C->BoundsRect.Bottom+IY); 
	        } 
	    } 
	
	HRGN hRgnTitle = ::CreateRectRgn( 
	         0, 0, Width, IY); 
	
	::CombineRgn(hRCompo, hRCompo, hRgnTitle, RGN_OR); 
	    ::DeleteObject(hRgnTitle); 
	
	    HRGN ClientRgn = ::CreateRectRgn( 
	         0, 0, Width, Height); 
	
	::CombineRgn(ClientRgn, ClientRgn, hRCompo, RGN_AND); 
	    ::DeleteObject(hRCompo); 
	
	::SetWindowRgn(Handle, ClientRgn, true); 
	    DeleteObject(ClientRgn); 
	} 
	
	void __fastcall TForm1::CreateParams(TCreateParams & Params) 
	{ 
	TForm::CreateParams(Params); 
	//    Params.ExStyle = Params.ExStyle | WS_EX_TRANSPARENT; 
	} 
	void __fastcall TForm1::FormCreate(TObject *Sender) 
	{ 
	//    Brush->Style = bsClear; 
	}   
	//---------------------------------------------------------------------------

 
71  /  BDE ˸ƽ   ˾Ƴ
	縮׸Դϴ.    ø? ^^;; 
	
	  BDE ˸ƽ  θ ˾ƳԴϴ.    ϵ ְ? 
	
	BDE ˸ƽ  θ ˾Ƴ BDE API Լ DbiGetDatabaseDesc() Լ ȣϸ ˴ϴ. ׷  Լ ˸ƽ   ƴ϶ ˸ƽ DB Ÿ  ˸ƽ  ˾Ƴ Լϴ. ű BDE API Լ Ϸ ʱȭϱ  DbiInit() Լ, ׸ Ŭ  DbiExit() Լ ȣؾ ϴ  ׳ ϱ⿣  ŷӽϴ. ׷... Ʒ  ѹ濡~ ȽýƮ BDE ˸ƽ θ ˾Ƴ Լ ýϴ. 
	
	AnsiString __fastcall GetDbAliasPath(AnsiString AliasName) 
	{ 
	    Word rslt = DbiInit(NULL); 
	    if(rslt != DBIERR_NONE) return ""; 
	    DBDesc Desc;     
	    rslt = DbiGetDatabaseDesc(AliasName.c_str(), &Desc); 
	    if(rslt != DBIERR_NONE) return ""; 
	    AnsiString Result = Desc.szPhyName; 
	    DbiExit(); 
	    return Result; 
	} 
	
	  ? ׷ ǽñ...
